2017-09-26 80 views
0

这应该是一个容易的,但不知何故,我找不到一个有效的解决方案。熊猫 - dataframe groupby - 如何获得多列总和

我有一个熊猫数据帧,看起来像这样:

index col1 col2 col3 col4 col5 
0  a  c  1  2  f 
1  a  c  1  2  f 
2  a  d  1  2  f 
3  b  d  1  2  g 
4  b  e  1  2  g 
5  b  e  1  2  g 

我想GROUP BY col1和col2上,并得到COL3和COL4的sum()Col5可以被丢弃,因为数据不能被聚合。

下面是输出结果的样子。我有兴趣在结果数据框中同时使用col3col4col1col2是否是索引的一部分并不重要。

index col1 col2 col3 col4 
0  a  c  2  4   
1  a  d  1  2  
2  b  d  1  2  
3  b  e  2  4  

这里是我的尝试:

df_new = df.groupby(['col1', 'col2'])["col3", "col4"].sum() 

这不过只是返回col4的汇总结果。

我迷失在这里。我找到的每个示例都只汇总了一列,问题显然不会发生。

+0

问题可能是'df.col3.dtype'很可能不是一个'int'或数字数据类型。在做'groupby'之前尝试'df.col3 = df.col3.astype(int)' –

回答

3

通过使用apply

df.groupby(['col1', 'col2'])["col3", "col4"].apply(lambda x : x.astype(int).sum()) 
Out[1257]: 
      col3 col4 
col1 col2    
a c  2  4 
    d  1  2 
b d  1  2 
    e  2  4 

是要agg

df.groupby(['col1', 'col2']).agg({'col3':'sum','col4':'sum'}) 
0

的问题很可能是df.col3.dtype很可能不是一个int或数字数据类型。尝试df.col3 = df.col3.astype(int)做你groupby

之前此外,选择列GROUPBY后,看是否列甚至被汇总:

df_new = df.groupby(['col1', 'col2']).sum()[["col3", "col4"]]