分组并获得最频繁的行

时间:2018-03-21 15:52:42

标签: python pandas

我有一个这样的数据框:

    col1     col2
0   maria    apple
1   eugene   apple
2   eugene   banana
3   maria    apple
4   maria    pear
5   eugene   banana
6   maria    apple

我想按人分组,看看那个人最常见的水果是什么,如下:

    col1     col2    col3
0   maria    apple   3
1   eugene   banana  2

编辑到目前为止我完成的是:

    col1     col2
   maria    apple   2
            pear    1
   eugene   banana  2
            apple   1

df.groupby('col1')['col2'].value_counts()

但是我无法弄清楚如何只得到最大值,因为它是一个系列,而不是数据帧

3 个答案:

答案 0 :(得分:1)

IIUC:

df.groupby('col1')['col2'].apply(lambda x: x.value_counts().head(1))

输出:

col1          
eugene  banana    2
maria   apple     3
Name: col2, dtype: int64

答案 1 :(得分:0)

来自mode

scipy

from scipy import stats

df.groupby('col1').col2.apply(stats.mode)
Out[530]: 
col1
eugene    ([banana], [2])
maria      ([apple], [3])
Name: col2, dtype: object

答案 2 :(得分:0)

首先在groupby()上使用col1,使用value_counts()获取频率,然后使用sort_values()函数按降序排序值

a = pd.DataFrame({"col1": ["maria","eugene","eugene","maria","maria","eugene","maria"],
          "col2": ["apple", "apple","banana","apple","pear","banana","apple"]})  
a.groupby(["col1"])["col2"].value_counts().sort_values(ascending=False)