我有一个如下数据框。
>>> data
target user data
0 A 1 0
1 A 1 0
2 A 1 1
3 A 2 0
4 A 2 1
5 B 1 1
6 B 1 1
7 B 1 0
8 B 2 0
9 B 2 0
10 B 2 1
您可以看到每个用户可能对一个目标做出多个声明。我只想为每个目标存储每个用户的最频繁数据。例如,对于上面显示的数据框,我希望得到如下结果。
>>> result
target user data
0 A 1 0
1 A 2 0
2 B 1 1
3 B 2 0
如何执行此操作?而且,我可以使用groupby来做到这一点吗? (我的真实数据框未排序)
谢谢!
答案 0 :(得分:1)
使用groupby
和count
创建帮助键,然后我们使用idxmax
df['helperkey']=df.groupby(['target','user','data']).data.transform('count')
df.groupby(['target','user']).helperkey.idxmax()
Out[10]:
target user
A 1 0
2 3
B 1 5
2 8
Name: helperkey, dtype: int64
df.loc[df.groupby(['target','user']).helperkey.idxmax()]
Out[11]:
target user data helperkey
0 A 1 0 2
3 A 2 0 1
5 B 1 1 2
8 B 2 0 2