2017-04-12 229 views
2

我有一个数据帧列的不同群体熊猫据帧聚合

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 

我想GROUPBY“组”列,然后做几个不同的操作:

•对于列“一”我想得到的最小和最大值

•对于剩下的我要总结他们

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

为T这里有一个简单的方法来做到这一点 结果应该是这个样子:

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

回答

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 
+0

得到它这回答它 – RSHAP

+1

@RSHAP这将取决于实际使用情况(你如何确定列等),但你可以这样做'dict.fromkeys(名单(“BCD”),“总和')' – ayhan

+0

您可以分别指定所有操作,即PiRsquared的做法,然后传递该函数。这会提高可读性,当有很多列,但不会减少工作 – Vaishali

3

这是不同的,因为我们正在利用内部引用summinmax功能大熊猫。我认为我们应该尽可能地利用这些。

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