按多列对数据框进行分组[重复]

Posted

技术标签:

【中文标题】按多列对数据框进行分组[重复]【英文标题】: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 的方法官方指南/页面。 【参考方案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

【讨论】:

以上是关于按多列对数据框进行分组[重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何按多列分组以在熊猫数据框中列出

如何使用linq按多列分组[重复]

如何按id python按一列顺序对两列进行分组[重复]

按 10 分钟间隔对 pandas DataFrame 进行分组[重复]

在多列上分组时如何绘制条形图?

具有多列的数据框的不同聚合