【问题标题】:Grouping and getting the most frequent row分组并获取最频繁的行
【发布时间】:2018-03-21 15:52:42
【问题描述】:

我有一个这样的数据框:

    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()

但我无法弄清楚如何仅获取最大值,因为它是一个系列,而不是数据框

【问题讨论】:

  • @Drise,这是因为我们越来越多地获得“功能用户”——既不是专业的也不是狂热的程序员。更多的人只想把事情做好。 Python 因其简单的语法而受到更多关注。
  • 很抱歉,我认为人们不想看到我失败的尝试,因此会编辑帖子。

标签: python pandas


【解决方案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

【讨论】:

    【解决方案2】:

    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
    

    【讨论】:

      【解决方案3】:

      首先在您的col1 上使用groupby(),使用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)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-04-09
        • 2020-11-11
        • 2018-07-13
        • 2020-09-20
        相关资源
        最近更新 更多