按多列对数据框进行分组[重复]
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
【讨论】:
以上是关于按多列对数据框进行分组[重复]的主要内容,如果未能解决你的问题,请参考以下文章