简体   繁体   English

Pandas:按组查找列最小和最大范围

[英]Pandas: find column min and max ranges by group

I have a data frame like so:我有一个像这样的数据框:

df = pd.DataFrame({
    'A':np.random.random(20),
    'B':np.random.random(20),
    'Gen': [1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4]
})

Is there a simple way with pandas to find the range (min and max values) in each column by group 'Gen'? pandas 是否有一种简单的方法可以按“Gen”组在每列中查找范围(最小值和最大值)? In real life, I can have lots of columns A, B, ... (>20).在现实生活中,我可以有很多列 A、B、...(>20)。 The result could look something like:结果可能类似于:

Var   Gen    Min   Max
A     1      x     x
B     1      x     x
A     2      x     x
...

You can melt to reshape, then groupby + agg to aggregate per group:您可以melt重塑,然后groupby + agg聚合每组:

(df.melt(id_vars='Gen', var_name='Var')
   .groupby(['Var', 'Gen'])['value']
   .agg(['min', 'max'])
   #.reset_index()  # uncomment to have Gen/Var as columns
)

Alternatively, aggregate first, then stack :或者,先聚合,然后stack

df.groupby('Gen').agg(['min', 'max']).stack(level=0)

output: output:

              min       max
Var Gen                    
A   1    0.009241  0.813241
    2    0.142218  0.751106
    3    0.005829  0.991914
    4    0.033108  0.579354
B   1    0.241094  0.990492
    2    0.030335  0.848735
    3    0.209076  0.785530
    4    0.277970  0.962307

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM