gpt4 book ai didi

Python Pandas 基于列分组并获得最大值,但基于另一列排除

转载 作者:行者123 更新时间:2023-11-28 22:27:08 32 4
gpt4 key购买 nike

我正在处理一些数据,想提取特定列的最大值,按不同的列分组。但是,我想根据另一列从最大计算中排除某些行。

例子:

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 中具有“其他”的任何行。因此,“A”的 Col3 最大值应该是 5,而不是 17。

我能够使用以下命令获得 Col1 分组的 Col3 的最大值:df['new'] = df.groupby(['Col1'])['Col3'].transform(max) 然而,这将为我提供 17 的 A 值。

通过查看其他线程,我尝试使用:

x = df1.groupby(['Col1'])
x2 = x.apply(lambda g: g[g['Col2'] != 'Other'])

这似乎让我很接近(它有按 Col1 分组的数据,并根据 Col2 删除了行)。但是,我似乎再也找不到一种方法来获得基于 Col1 的 Col3 的最大值。

充其量我已经能够使用:x2['Col3'].max() 在删除 Col2 中所有带有“Other”的行后获得 Col3 的最大值。但是,我无法获得按 Col1 分组的 Col3 的最大值。

我想知道是否有一种方法可以使用内置的 Pandas 函数相对简单地执行此操作,而不是创建一个全新的定制函数?

最佳答案

你可以试试

df[df.Col2 != 'Other'].groupby('Col1').Col3.max()

Col1
A 5
B 13

创建新列:

df['new']=df[df.Col2 != 'Other'].groupby('Col1').Col3.transform('max')
df['new'] = df.new.ffill()

Col1 Col2 Col3 new
0 A Build 2 5.0
1 A Plan 5 5.0
2 A Other 17 5.0
3 B Test 5 13.0
4 B Build 13 13.0
5 B Other 12 13.0
6 B Buy 12 13.0

解释:仅选择 df 中 Col2 值不等于“其他”的行,groupby Col1,找到 Col3 的最大值。

Here是转换的文档:它返回一个带有转换值的类似索引 df,而不是聚合。

关于Python Pandas 基于列分组并获得最大值,但基于另一列排除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44222655/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com