Python 按多列对数据帧进行分组
我想按多个列对数据帧进行分组。每行有一个整数、一个名称和一个附加的数值。我希望最后的数据帧包括名称具有最高整数的每一行Python 按多列对数据帧进行分组,python,pandas,Python,Pandas,我想按多个列对数据帧进行分组。每行有一个整数、一个名称和一个附加的数值。我希望最后的数据帧包括名称具有最高整数的每一行 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 Na
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行仍应包含在数据框中。IIUC,您可以将每个名称的Int列与max 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
IIUC,您可以将每个名称的Int列与max 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
在这种特定情况下,由于要返回所有匹配的行,因此应使用
transform
创建布尔掩码(dup中Zelazny7的答案)。其他使用sort
+drop_duplicates
或.idxmax
的方法将最多返回一行,这不是您想要的。上面代码中的df_grouped=df.groupby('Int').agg(lambda x:list(x)).max()将返回Int列中的max值。建议:参考pandas的方法官方指南/页面。在这种情况下,由于您希望返回所有匹配的行,因此应使用transform
创建布尔掩码(dup中Zelazny7的答案)。其他使用sort
+drop_duplicates
或.idxmax
的方法将最多返回一行,这不是您想要的。上面代码中的df_grouped=df.groupby('Int').agg(lambda x:list(x)).max()将返回Int列中的max值。建议:参考熊猫方法官方指南/页面。