我不知道如何执行以下操作:
假设我有一个包含 3 列的 pandas 数据框:A
、B
和 C
。
我想首先按A
分组,然后对B
和C
进行聚合。假设我想获取 B
的 mean
和 C
的 max
,那么我可以简单地执行以下操作:
import pandas as pd
df = pd.DataFrame({'A' : ['a', 'a', 'b', 'b'],
'B' :[50, 70, 50, 30] ,
'C' : [100, -150, -110, 180] })
df.groupby("A").agg({"B":"mean", "C":"max"})
但是,我想要做的是获取 C 的 abs
值的 max
。
我尝试了各种方法,包括this answer中描述的方法,但不知何故,它从来没有给我我想要的东西。我确信这个问题有一个简单的答案......我做错了什么?
预期的输出当然是
C A
a 60 150
b 40 180
最佳答案
我认为需要自定义功能:
df1 = df.groupby("A").agg({"B":"mean", "C":lambda x: x.abs().max()})
print (df1)
C B
A
a 150 60
b 180 40
df1 = df.assign(C = lambda x: x['C'].abs()).groupby("A").agg({"B":"mean", "C":"max"})
详细信息:
print (df.assign(C = lambda x: x['C'].abs()))
A B C
0 a 50 100
1 a 70 150
2 b 50 110
3 b 30 180
关于python - 对 pandas 数据框进行分组,然后通过聚合取abs的平均值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49981826/