Найти количество истинных значений несколько раз - PullRequest
0 голосов
/ 17 ноября 2018

После вычисления среднего значения для всех записей по типу события я теперь должен вычислить количество набранных атлетом очков выше среднего.Я нашел способ сделать это по одному, но я хотел бы знать, есть ли более элегантный способ сделать это в пандах.Извините за изображения, но это, пожалуй, лучший способ показать вам, ребята, что я сделал и хочу сделать

РЕДАКТИРОВАТЬ: Мои извинения, я новичок в интерфейсе.Я постараюсь быть максимально понятным с кодом. (Кто-нибудь знает, как лучше отобразить фрейм данных, который не является изображением для стекового потока?

d = {'Event':['Mens 100m','Womens 100m','Mens 800m', 'Mens 800m'],'Record':[10.06,10.6,50.4,60.5]}
df = pd.DataFrame(data = d)

1.) Мне нужно было найти средстванаборы записей для всех различных событий:

for i in range(len(Events)):
     x = df[df['Event'] == Events[i]]['Record'].mean()
     print(Events[i], ":", "{0:.5f}".format(x))

# В строке ниже приведен список всех средств для различных типов событий с использованием списка comp.

Means =  [df[df['Event']== Events[i]]['Record'].mean() for i in range(len(Events))]

2.) Используя эти средства, я должен найти количество спортсменов для каждого события, у которого есть запись выше среднего, которое было вычислено в строке выше.

# i = 0 where Events[0] is 'Womens 100m'
i = 0; df[df['Event'] == Events[i]][['Record']] > Means[i]

Вывод: 2

Мне нужно посчитать количество истинных значений в приведенном выше для всех событий.Есть ли хороший способ сделать это, кроме как присвоить его серии, а затем считать True?Что бы выглядело так:

d = {'Athletes over Mean for Each Event':[4,6,10,2,5,6]}
df = pd.DataFrame(data = d)

Еще раз спасибо заранее, надеюсь, на этот раз я прояснил ситуацию.

Ответы [ 2 ]

0 голосов
/ 17 ноября 2018

IIUC, вам нужно количество вхождений в разных категориях, где оно превышает среднее значение для этой категории. Приведенный ниже код, без сомнения, можно оптимизировать, но сейчас он может быть вам полезен.

import pandas as pd
import numpy as np

df = pd.DataFrame( {
   'A': ['d','d','d','f','f','f','g','g','g','h','h','h'],
   'B': [9,10,11,7,9,10,11,8,12,7,8,12],
    } );

df_grouped = df.groupby('A')['B'].mean()
df_grouped.to_frame()
df_grouped.reset_index()

df1 = df.merge(df_grouped.to_frame(), left_on='A', right_index=True)

df1['num'] = np.where(df1['B_x'] > df1['B_y'], 1, 0)

df2 = df1.groupby('A')['num'].apply(lambda x: (x==1).sum()).reset_index(name='count')

df2


A   count
0   d   1
1   f   2
2   g   2
3   h   1

Я сделал свои собственные образцы данных. Вы можете заменить 'A' на 'Event' и 'B' на 'Record'

0 голосов
/ 17 ноября 2018

Вы можете отфильтровать ваш фрейм данных (я полагаю, у вас есть) и получить длину или форму примерно так:

  Number_above_mean = len(df[(df[player]==nameyouwant)&(df[score]>df[score].mean())])

или

Number_above_mean = df[(df[player]==nameyouwant)&(df[score]>df[score].mean())].shape

PS.Пожалуйста, добавьте ваш код и пример данных

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...