Панды считают конкретные значения в результатах группового - PullRequest
0 голосов
/ 02 октября 2018

Я только что узнал, как сгруппировать DataFrame Pandas с указателем даты и времени по датам.Как подсчитать количество определенных значений («Пройдено» или «Неудачно») за каждый день, возвращаемый группой?

Моя цель - рассчитать дневную доходность: yield = пройдено_счетом / (прошло_счет + неудачно_счетом)).

import pandas as pd
import random

data = [random.choice(['Passed','Failed']) for i in range(100)]
times = pd.date_range('20180101',freq='3H',periods=100)

df = pd.DataFrame({'A':data},index=times)
group = df.groupby(pd.Grouper(freq='1D'))

1 Ответ

0 голосов
/ 02 октября 2018

Я думаю, вам нужно GroupBy.size или SeriesGroupBy.value_counts, изменить на unstack и в последнем случае разделить на sum:

np.random.seed(142)

data = np.random.choice(['Passed','Failed'], size=100)
times = pd.date_range('20180101',freq='3H',periods=100)

df = pd.DataFrame({'A':data},index=times)
#print (df)

df1 = df.groupby([pd.Grouper(freq='1D'), 'A']).size().unstack(fill_value=0)
#alternative 
#df1 = df.groupby(pd.Grouper(freq='1D'))['A'].value_counts().unstack(fill_value=0)
df1['new'] = df1['Passed'].div(df1.sum(axis=1))
#alternative
#df1['new'] = df1['Passed'].div(df1['Passed'].add(df1['Failed']))

print (df1)
A           Failed  Passed    new
2018-01-01       5       3  0.375
2018-01-02       5       3  0.375
2018-01-03       4       4  0.500
2018-01-04       4       4  0.500
2018-01-05       4       4  0.500
2018-01-06       3       5  0.625
2018-01-07       4       4  0.500
2018-01-08       5       3  0.375
2018-01-09       4       4  0.500
2018-01-10       4       4  0.500
2018-01-11       4       4  0.500
2018-01-12       7       1  0.125
2018-01-13       0       4  1.000
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...