假定我的数据集
Name Num Label
0 K 10 0
1 K 21 0
2 K 31 0
3 K 41 1
4 Y 9 0
5 Y 19 0
6 Y 14 1
7 B 33 0
8 B 43 0
9 B 77 1
10 B 89 1
每个名称都有数值数据,标签为 0/1。
我想将标签 0 的最大值与最大值 1 进行比较,并仅提取最大值为 1 的最大值。
如果我应用我所说的逻辑,它们是K和B (K - 最大标签 0 : 31<最大标签 _x0031_=" _x0034_1=" B=" _x002D_=" 最大标签=" _x0030_=" _x0034_3=">
结果是我想要的
Name Num Label
0 K 10 0
1 K 21 0
2 K 31 0
3 K 41 1
4 B 33 0
5 B 43 0
6 B 77 1
7 B 89 1
感谢您的阅读
最大标签>获取具有聚合max
的过滤行的最大值,然后使用Series.map
进行原始DataFrame
,并按每组的最大值进行比较GroupBy.transform
:
s = df[df['Label'].eq(1)].groupby('Name')['Num'].max()
df = df[df['Name'].map(s).eq(df.groupby('Name')['Num'].transform('max'))]
print (df)
0 K 10 0
1 K 21 0
2 K 31 0
3 K 41 1
7 B 33 0
8 B 43 0
9 B 77 1
10 B 89 1