python pandas简单数据透视表总数

时间:2016-06-22 10:30:56

标签: python pandas dataframe group-by pivot-table

我试图找出对数据进行简单转换的最佳方法:

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

我想要的输出是一个按A分组的数据帧,BC的总和和计数值,名称必须是{{1} }},Sum_BSum_C),如下所示:

Count

最快的方法是什么?

3 个答案:

答案 0 :(得分:3)

您可以使用.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

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

PS以下是link

提供的示例@evan54

答案 1 :(得分:2)

我认为您可以this is running display window使用sumlenaggregate列以及rename列的最后更改顺序:

print (dfn.groupby('A')
          .agg({'B': sum, 'C':sum, 'A':len})
          .rename(columns={'A': 'Count', 'B': 'Sum_B', 'C': 'Sum_C'})
          .reindex_axis(['Sum_B','Sum_C','Count'], axis=1))  

     Sum_B  Sum_C  Count
A                       
aaa      3      5      2
bbb     40     20      2

如果需要reindex_axis

print (dfn.groupby('A')
          .agg({'B': sum, 'C':sum, 'A':len})
          .rename(columns={'A': 'Count', 'B': 'Sum_B', 'C': 'Sum_C'})
          .reindex_axis(['Sum_B','Sum_C','Count'], axis=1)
          .reset_index())  

     A  Sum_B  Sum_C  Count
0  aaa      3      5      2
1  bbb     40     20      2

相反len您可以使用size,但同样如此:

print (dfn.groupby('A')
          .agg({'B': sum, 'C':sum, 'A':'size'})
          .rename(columns={'A': 'Count', 'B': 'Sum_B', 'C': 'Sum_C'})
          .reindex_axis(['Sum_B','Sum_C','Count'], axis=1)
          .reset_index())  

     A  Sum_B  Sum_C  Count
0  aaa      3      5      2
1  bbb     40     20      2      

reset_indexsize之间的差异(请参阅count):

答案 2 :(得分:1)

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

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

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