总结在python pandas数据帧中使用多个列

时间:2017-07-13 08:42:58

标签: python pandas

在R中,我可以使用多个数据列汇总数据,如下所示: 库(dplyr):

A =  B %>%
group_by(col1,col2) %>%
summarize(newcol = sum(col3)/sum(col4))

但是在python的pandas数据帧中,我如何一步完成相同的操作?

我可以分两步完成。 第1步:

A = B.groupby(['col1','col2']).agg({'col3': 'sum','col4':'sum'})

第2步:

A['newcol'] = A['col3']/A['col4']

2 个答案:

答案 0 :(得分:3)

您需要使用带有lambda表达式的赋值:

df = pd.DataFrame({'col1': list('aaabbb'), 
                   'col2': list('xyxyxy'), 
                   'col3': np.random.randn(6), 
                   'col4': np.random.randn(6)})

df
Out: 
  col1 col2      col3      col4
0    a    x -2.276155  0.323778
1    a    y -0.367525 -2.570142
2    a    x -0.672530  2.265560
3    b    y  0.588741  0.193499
4    b    x -1.368829  0.717997
5    b    y  1.012271  1.354408

(df.groupby(['col1','col2'])
   .agg({'col3': 'sum','col4':'sum'})
   .assign(newcol=lambda x: x['col3']/x['col4']))
Out: 
               col4      col3    newcol
col1 col2                              
a    x     2.589338 -2.948686 -1.138780
     y    -2.570142 -0.367525  0.142998
b    x     0.717997 -1.368829 -1.906453
     y     1.547907  1.601012  1.034308

如果您只需要新列,请使用apply:

df.groupby(['col1','col2']).apply(lambda x: x['col3'].sum() / x['col4'].sum())
Out: 
col1  col2
a     x      -1.138780
      y       0.142998
b     x      -1.906453
      y       1.034308
dtype: float64

如果您在大数据集上使用此功能,请避免应用并使用eval。

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

答案 1 :(得分:0)

使用 datar,您可以像在 R 中那样做:

from datar import f
from datar.base import sum
from datar.dplyr import group_by, summarise

A =  B >> \
  group_by(f.col1,f.col2) >> \
  summarize(newcol = sum(f.col3)/sum(f.col4))
相关问题