熊猫将每组都变成一行

时间:2018-07-19 00:59:15

标签: pandas pandas-groupby

我有一个如下数据框。

>>> 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来做到这一点吗? (我的真实数据框未排序)

谢谢!

1 个答案:

答案 0 :(得分:1)

使用groupbycount创建帮助键,然后我们使用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