用gropuby计算熊猫数据框中的元素,并将其附加到现有数据框中

时间:2018-06-26 16:22:43

标签: python pandas dataframe pandas-groupby

我有一个具有以下结构的熊猫数据框:

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 :(得分:4)

webroot/vista/imagenes/ + groupbytransform一起使用:

'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 一起使用,但是由于该选项未利用字符串指示的优化函数,因此它的运行速度明显慢。

答案 1 :(得分:3)

np.bincountpd.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