【问题标题】:Group dataframe by multiple columns [duplicate]按多列对数据框进行分组[重复]
【发布时间】:2019-08-29 19:42:46
【问题描述】:

我想按多列对 Pandas 数据框进行分组。每行都有一个整数、一个名称和一个附加数值。我希望最终的 Dataframe 包含 Name 具有最大整数的每一行。

values = {'Int': [1,1,1,2,2,1],
          'Name': ['Tom', 'Jim', 'Jan','Tom', 'Tom', 'Lucas'],
          'Bill':[0.5,0.2,0.2,0.7, 0.8, 0.2]}

df = pd.DataFrame.from_dict(values)

   Int   Name  Bill
0    1    Tom   0.5
1    1    Jim   0.2
2    1    Jan   0.2
3    2    Tom   0.7
4    2    Tom   0.8
5    1  Lucas   0.2

通过对数据框进行分组,只有第 0 行应该消失。第 3 行和第 4 行仍应包含在数据框中。

【问题讨论】:

  • 在这种特定情况下,由于您想要返回匹配的 所有 行,因此您应该使用 transform 创建一个布尔掩码(Zelazny7 在 dup 中的回答)。其他使用sort + drop_duplicates.idxmax 将最多返回一行,这不是您想要的。
  • df_grouped = df.groupby('Int').agg(lambda x: list(x)).max() 上面的代码将返回 Int 列中的 max 值。建议:参考 pandas 的方法官方指南/页面。

标签: python pandas


【解决方案1】:

IIUC,您可以将 Int 列与每个 Name 的最大 Int 进行比较,如下所示:

df[df['Int'] == df.groupby('Name')['Int'].transform('max')]

output:
    Int Name    Bill
1   1   Jim 0.2
2   1   Jan 0.2
3   2   Tom 0.7
4   2   Tom 0.8
5   1   Lucas   0.2

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-09-26
    • 2021-12-09
    • 2021-06-25
    • 1970-01-01
    • 2022-01-22
    • 1970-01-01
    • 2012-10-07
    • 1970-01-01
    相关资源
    最近更新 更多