我有一个具有以下结构的熊猫数据框:
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)
谢谢
答案 0 :(得分:4)
将webroot/vista/imagenes/
+ 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
一起使用,但是由于该选项未利用字符串指示的优化函数,因此它的运行速度明显慢。
答案 1 :(得分:3)
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