【发布时间】:2017-10-28 14:12:28
【问题描述】:
我正在处理一些数据,并希望提取某个列的最大值,按不同的列分组。但是,我想根据另一列从最大计算中排除某些行。
例子:
df = pd.DataFrame({'Col1':['A','A','A','B','B','B','B'],
'Col2':['Build','Plan','Other','Test','Build','Other','Buy'],
'Col3':[2,5,17,5,13,12,12]})
我想获得 Col3 的最大值,按 Col1 分组,同时排除 Col2 中包含“Other”的任何行。因此,'A' 的 Col3 的最大值应该是 5,而不是 17。
我能够使用:df['new'] = df.groupby(['Col1'])['Col3'].transform(max) 获得按 Col1 分组的 Col3 的最大值,但是,这将为 A 提供 17 的值。
通过查看其他线程,我尝试使用:
x = df1.groupby(['Col1'])
x2 = x.apply(lambda g: g[g['Col2'] != 'Other'])
这似乎让我很接近(它的数据按 Col1 分组,并根据 Col2 删除了行)。但是,我似乎再也找不到基于 Col1 获得 Col3 最大值的方法了。
充其量我已经能够使用:x2['Col3'].max() 在删除 Col2 中带有“其他”的所有行后获得 Col3 的最大值。但是,我无法获得按 Col1 分组的 Col3 的最大值。
我想知道是否有一种方法可以使用内置的 Pandas 函数来相对简单地执行此操作,而不是创建一个全新的定制函数?
【问题讨论】:
-
先过滤你的数据框,然后按 Col1 分组。
-
df.query('Col2 != "Other"').groupby('Col1')['Col3'].max()