Pandas Dataframe聚合不同的列组

时间:2017-04-12 19:41:04

标签: pandas dataframe group-by aggregate

我有一个数据框

df = pd.DataFrame(
[np.random.randint(1,10,8),
np.random.randint(1,10,8),
np.random.randint(1,10,8),
np.random.randint(1,10,8)]).T

# left col is the index
>> a  b  c  d group
0  5  6  3  2    g1
1  5  6  6  6    g1
2  3  9  5  3    g1
3  5  6  8  2    g1
4  2  2  9  6    g1
5  9  5  4  8    g2
6  1  3  5  2    g2
7  3  8  8  6    g2

我想分组" group"列,然后做一些不同的操作:

•对于专栏" a"我想获得最小值和最大值

•其余的我想总结一下

min_max_col = ['a']
sum_cols = ['b','c','d']

有一种简单的方法吗? 结果应如下所示:

>>   min  max  sum_b  sum_c  sum_d
g1    2    5     29     48     19
g2    1    9     16     48     16

2 个答案:

答案 0 :(得分:3)

使用agg

df = df.groupby('group').agg({'a':[ np.min,  np.max], 'b': np.sum, 'c': np.sum, 'd': np.sum})
df.columns = ['min', 'max', 'sum_b', 'sum_c', 'sum_d']
df = df.reset_index()


    group   min max sum_b   sum_c   sum_d
0   g1      2   5   29      31      19
1   g2      1   9   16      17      16

答案 1 :(得分:3)

这是不同的,因为我们正在利用内部引用的summinmax函数的pandas。我认为我们应该尽可能地利用这些。

f = dict(
    a=['min', 'max'],
    b='sum',
    c='sum',
    d='sum'
)

df.groupby('group').agg(f)

        a       b   c   d
      min max sum sum sum
group                    
g1      2   5  29  31  19
g2      1   9  16  17  16