Условный подсчет в Groupby Pandas - PullRequest
0 голосов
/ 04 июня 2018

У меня есть фрейм данных, который имеет биржевые тикеры и точность моделей для различных дат, который выглядит следующим образом:

ZAYO  20170228  0.203997
ZAYO  20170531  0.180037
ZAYO  20170831  0.110623
ZBH   20170131  0.130060
ZBH   20170430  0.115384
ZBH   20170731  0.065990
AAAP  20170331  1.075765
AAAP  20170630  1.119365
AAAP  20170930  0.223602
AAL   20170131  0.338255
AAL   20170430  0.386442
AAL   20170731  0.171351

Я хочу создать сводный фрейм данных, где каждая строка содержит имя тикера, среднюю точность,% случаев, когда точность выше 20,% случаев, когда точность выше 50%.

Я использую

dfGrouped = df.groupby(['tickers'])
dfGrouped.Accuracy.mean()

, чтобы получить среднюю точность, но не уверен в чистом способе подсчетаво сколько раз точность для определенного тикера была выше 20%, 50%.

Ответы [ 2 ]

0 голосов
/ 04 июня 2018

Использование groupby.agg со словарем расчетов:

from collections import OrderedDict

df.columns=['ticker', 'date', 'accuracy']

groupers = OrderedDict([('mean', np.mean),
                        ('>_0.20_pct', lambda x: (x > 0.20).sum()/len(x)),
                        ('>_0.50_pct', lambda x: (x > 0.50).sum()/len(x)),
                        ('>_0.70_pct', lambda x: (x > 0.70).sum()/len(x))])

res = df.groupby('ticker')['accuracy'].agg(groupers)

print(res)

            mean  >_0.20_pct  >_0.50_pct  >_0.70_pct
ticker                                              
AAAP    0.806244    1.000000    0.666667    0.666667
AAL     0.298683    0.666667    0.000000    0.000000
ZAYO    0.164886    0.333333    0.000000    0.000000
ZBH     0.103811    0.000000    0.000000    0.000000
0 голосов
/ 04 июня 2018

Попробуйте это:

dfGrouped.where(dfGrouped.Accuracy < 0.20).Accuracy.count()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...