gpt4 book ai didi

python - pandas groupby 中两个系列的最大值和最小值

转载 作者:太空宇宙 更新时间:2023-11-03 13:29:20 26 4
gpt4 key购买 nike

是否可以从 groupby 中的两个系列中获取最小值和最大值?

例如在下面的情况下,当按c分组时,我怎样才能得到ab的最小值和最大值在同一时间?

df = pd.DataFrame({'a': [10,20,3,40,55], 'b': [5,14,8,50,60], 'c': ['x','x','y','y','y']})
g = df.groupby(df.c)
for key, item in g:
print (g.get_group(key), "\n")

a b c
0 10 5 x
1 20 14 x

a b c
2 3 8 y
3 40 50 y
4 55 60 y

我通过取每个分组系列的最小值和最大值然后找到 _min/_max 系列的最小值和最大值解决了这个问题:

df['a_min'] = g['a'].transform('min')
df['a_max'] = g['a'].transform('max')
df['b_min'] = g['b'].transform('min')
df['b_max'] = g['b'].transform('max')
df['min'] = df[['a_min', 'a_max', 'b_min', 'b_max']].min(axis=1)
df['max'] = df[['a_min', 'a_max', 'b_min', 'b_max']].max(axis=1)

a b c a_min a_max b_min b_max min max
0 10 5 x 10 20 5 14 5 20
1 20 14 x 10 20 5 14 5 20
2 3 8 y 3 55 8 60 3 60
3 40 50 y 3 55 8 60 3 60
4 55 60 y 3 55 8 60 3 60

这会产生我想要的输出,但有很多额外的系列。我想知道是否有更好的方法来做到这一点?

最佳答案

使用:

df = df.join(df.melt('c').groupby('c')['value'].agg(['min','max']), 'c')
print (df)
a b c min max
0 10 5 x 5 20
1 20 14 x 5 20
2 3 8 y 3 60
3 40 50 y 3 60
4 55 60 y 3 60

详细信息:

需要一个包含 ab 值的列 melt :

print (df.melt('c'))
c variable value
0 x a 10
1 x a 20
2 y a 3
3 y a 40
4 y a 55
5 x b 5
6 x b 14
7 y b 8
8 y b 50
9 y b 60

然后通过groupby 聚合minmaxagg :

print(df.melt('c').groupby('c')['value'].agg(['min','max']))
min max
c
x 5 20
y 3 60

最后join原创。

关于python - pandas groupby 中两个系列的最大值和最小值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49781015/

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