python pandas简单数据透视表总计数

DPC*_*tto 5 python group-by pivot-table dataframe pandas

我正在尝试找出对数据进行简单处理的最佳方法:

import pandas    
dfn = pandas.DataFrame({
    "A" : [ 'aaa', 'bbb', 'aaa', 'bbb' ],
    "B" : [     1,    10,     2,   30  ],
    "C" : [     2,     0,     3,   20  ] })
Run Code Online (Sandbox Code Playgroud)

我想有输出是一个数据帧,通过分组A,即总和和计数值BC,和名称必须是完全(Sum_BSum_CCount),如下:

A   Sum_B  Sum_C  Count
aaa    3      5       2
bbb   50     20       2
Run Code Online (Sandbox Code Playgroud)

最快的方法是什么?

Max*_*axU 5

你可以使用.agg()函数:

In [227]: dfn.groupby('A').agg({'B':sum, 'C':sum, 'A':'count'}).rename(columns={'A':'count'})
Out[227]:
      B  count   C
A
aaa   3      2   5
bbb  40      2  20
Run Code Online (Sandbox Code Playgroud)

或与reset_index()

In [239]: dfn.groupby('A').agg({'B':sum, 'C':sum, 'A':'count'}).rename(columns={'A':'count'}).reset_index()
Out[239]:
     A   B  count   C
0  aaa   3      2   5
1  bbb  40      2  20
Run Code Online (Sandbox Code Playgroud)

PS 这是@evan54提供的示例链接


eva*_*n54 1

执行此操作的一种方法是按所需的列进行分组,然后进行求和,如下所示。

r = dfn.groupby('A').sum()
r['counts'] = dfn.A.value_counts() # this could also be written as dfn['A'].value_counts()
Run Code Online (Sandbox Code Playgroud)

第一行计算总和,第二行获取每个值在 A 中出现的次数。