首页 > 解决方案 > 忽略 pandas 中不同行的最小值

问题描述

我低于熊猫数据框

Name    |  Value1 |  Value2
User 1  |  1      |  15
User 1  |  2      |  35
User 1  |  3      |  35
User 1  |  3      |  35
User 2  |  4      |  23
User 2  |  5      |  25
User 3  |  6      |  45
User 3  |  7      |  50

我只想使用熊猫数据框选择那些在Value2列中具有最大值的行

像这样:

Name    |  Value1 |  Value2
User 1  |  2      |  35
User 1  |  3      |  35
User 1  |  3      |  35
User 2  |  5      |  25
User 3  |  7      |  50

带有描述的代码将对我有更多帮助,因为熊猫对我来说是新的。

提前致谢 :)

标签: pandasdataframepandasql

解决方案


使用GroupBy.transformwithmax用于由每个组的最大值填充的系列,按列比较Value2Series.eq过滤boolean indexing

df1 = df[df.groupby('Name')['Value2'].transform('max').eq(df['Value2'])]
print (df1)

     Name  Value1  Value2
1  User 1       2      35
2  User 1       3      35
3  User 1       3      35
5  User 2       5      25
7  User 3       7      50

详情

print (df.groupby('Name')['Value2'].transform('max'))
0    35
1    35
2    35
3    35
4    25
5    25
6    50
7    50
Name: Value2, dtype: int64

print (df.groupby('Name')['Value2'].transform('max').eq(df['Value2']))
0    False
1     True
2     True
3     True
4    False
5     True
6    False
7     True
Name: Value2, dtype: bool

推荐阅读