подсчитывать элементы в фрейме данных pandas с помощью gropuby и присоединять их к существующему фрейму данных - PullRequest
0 голосов
/ 26 июня 2018

У меня есть датафрейм pandas со следующей структурой:

date    ticker Name 
2/1/10  aaa    zzz  
2/1/10  aaa    yyy  
2/5/10  bbb    xxx  
2/5/10  ccc    www  
2/5/10  ccc    qqq  
2/5/10  ddd    vvv  
2/6/10  aaa    zzz  

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

date    ticker Name count 
2/1/10  aaa    zzz  2
2/1/10  aaa    yyy  2
2/5/10  bbb    xxx  1
2/5/10  ccc    www  2
2/5/10  ccc    qqq  2
2/5/10  ddd    vvv  1
2/6/10  aaa    zzz  1

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

grpby2 = df2.groupby(['Date','Ticker'])
tmp = grpby2.agg({'Ticker':'max','Name':'count'}).reset_index(1,drop=True).reset_index(drop=False)

Спасибо

Ответы [ 2 ]

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

np.bincount и pd.factorize

f, u = pd.factorize(list(zip(df.date, df.ticker)))
df.assign(Count=np.bincount(f)[f])

     date ticker Name  Count
0  2/1/10    aaa  zzz      2
1  2/1/10    aaa  yyy      2
2  2/5/10    bbb  xxx      1
3  2/5/10    ccc  www      2
4  2/5/10    ccc  qqq      2
5  2/5/10    ddd  vvv      1
6  2/6/10    aaa  zzz      1
0 голосов
/ 26 июня 2018

Использование groupby + transform с 'count':

df['count'] = df.groupby(['date', 'ticker']).transform('count')

print(df)

     date ticker Name  count
0  2/1/10    aaa  zzz      2
1  2/1/10    aaa  yyy      2
2  2/5/10    bbb  xxx      1
3  2/5/10    ccc  www      2
4  2/5/10    ccc  qqq      2
5  2/5/10    ddd  vvv      1
6  2/6/10    aaa  zzz      1

Также работает с len, но эта опция значительно медленнее, поскольку она не использует оптимизированные функции, обозначенные строкой.

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