python - 使用 groupby 的数据框中的所有最大值
问题描述
我有这个:
df = pd.DataFrame({'C1': ["x", "x", "x", "y", "y", "y"],'C3': [12, 12, 7, 3, 6, 9]})
print (df)
输出是:
C1 C3
0 x 12
1 x 12
2 x 7
3 y 3
4 y 6
5 y 9
C1
当我试图获得我使用的每个项目的最大值时C3
:
df1 = df.groupby('C1').agg(max_ = ('C3', lambda data: data.idxmax()))
print (df1)
输出是:
C1 max_
x 0
y 5
但我希望输出是:
C1 max_
x 0
x 1
y 5
因为x
有两个最大值 (12)。
错误在哪里?我需要找到所有最大值,而不仅仅是一个。
解决方案
让我们groupby
继续使用列,C1
然后将此转换后的列与创建布尔掩码进行比较,然后使用此掩码过滤行以及列和列:transform
C3
max
C3
m
df
drop
C3
assign
_max
m = df['C3'] == df.groupby('C1')['C3'].transform('max')
df1 = df[m].drop('C3', 1).assign(_max=m[m].index)
print(df1)
C1 _max
0 x 0
1 x 1
5 y 5
推荐阅读
- sql - 优化 SQL 查询:如何检查一个 Id 是否分配给了比其他 Id 更多的 Id(不应该)
- javascript - UseEffect 不会使用更新的状态
- jenkins - 在 CentOS 7 上安装 Jenkins 时无法启动
- python - 迭代字典时Django模板未检测到某些键
- string - Haskell:字符串中最后两个整数的总和
- r - 如何在创建条件R时使用级别而不是标签
- chat - Mesibo SDK:1对1聊天:语音笔记功能Android
- javascript - 将对象键重命名为不同格式的方法
- javascript - 获取当前 Observable 状态的值
- python - Python matplotlib如何抑制科学计数法中的浮点数以节省ylabel的空间