【问题标题】:groupby max without dropping columnsgroupby max 不删除列
【发布时间】:2021-03-04 10:55:43
【问题描述】:

您好,我有以下假设的 df

df = pd.DataFrame({
'sp' : ['MM1', 'MM1', 'MM1', 'MM2', 'MM2', 'MM2', 'MM4', 'MM4','MM4'],
'mt' : ['S1', 'S1', 'S3', 'S3', 'S4', 'S4', 'S2', 'S2', 'S2'],
'val' : ['a', 'n', 'cb', 'mk', 'bg', 'dgb', 'rd', 'cb', 'uyi'],
'count' : [3,2,5,8,10,1,2,2,7]
})
top =df.groupby(['sp','mt']).agg({'count':'max'})
top

我在不删除 val 列的情况下按 sp 和 mt 分组,我该怎么做?这个想法是找到 val 的值,其中 count 是最大值

谢谢

【问题讨论】:

  • val有多个值。您的请求仅在您说 find the value of val where count 'reaches' max 时才有效
  • 感谢 Aaj 的 cmets,这正是我想要在这里实现的目标,有什么提示吗?
  • 请尝试澄清您的问题。在 groupby、count、max 等方面有很多类似的操作。
  • 按“计数”排序值,然后在 sp 和 mt 上删除重复项

标签: python pandas group-by pandas-groupby


【解决方案1】:

您可以将GroupBy.idxmax 用作.loc 的索引

idx = df.groupby(['sp', 'mt'])['count'].idxmax()
df.loc[idx.values, :]

    sp  mt  val  count
2  MM1  S3   cb      5
4  MM2  S4   bg     10
8  MM4  S2  uyi      7

【讨论】:

    【解决方案2】:

    选项#1 - 使用 groupby 扩展您的工作

    df['count1'] = df.groupby(['sp','mt'])['count'].transform('max')
    df = df[df['count'] == df['count1']].drop('count1',axis=1)
    

    选项#2 使用 sortdrop_duplicates

    df = df.sort_values('count',ascending=False).drop_duplicates(['sp','mt']).sort_index()
    

    两个打印件:

        sp  mt  val  count
    0  MM1  S1    a      3
    2  MM1  S3   cb      5
    3  MM2  S3   mk      8
    4  MM2  S4   bg     10
    8  MM4  S2  uyi      7
    

    【讨论】:

      猜你喜欢
      • 2016-10-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-28
      • 1970-01-01
      • 2019-12-26
      相关资源
      最近更新 更多