我正在尝试计算数据帧中某些值的计数
user_id event_type
1 a
1 a
1 b
2 a
2 b
2 c
我想得到像这样的桌子
user_id event_type event_type_count
1 a 2
1 a 2
1 b 1
2 a 1
2 b 1
2 c 2
2 c 2
换句话说,我想在数据框中插入数值计数而不是数值。
我曾经尝试使用df.join(pd.crosstab)...
,但是却得到了一个包含许多列的大型数据框。
哪种方法可以更好地解决此问题?
答案 0 :(得分:4)
两个列中的GroupBy.transform
使用GroupBy.size
:
df['event_type_count'] = df.groupby(['user_id','event_type'])['event_type'].transform('size')
print (df)
user_id event_type event_type_count
0 1 a 2
1 1 a 2
2 1 b 1
3 2 a 1
4 2 b 1
5 2 c 2
6 2 c 2