如何使用我的Pandas数据框创建显示组值sum()的数据透视表?

时间:2016-04-01 18:13:17

标签: python pandas pivot-table

我的df1

               cnpj     num_doc    bc_icms
0    02817342000124  0000010154   17827.07
1    54921580000189  0000112428  108000.00
2    08953538000122  0000012865     232.00
3    08953538000122  0000012865     239.00
4    08953538000122  0000012865     215.00
5    07374346000107  0000014224     320.12
6    07374346000107  0000014231     385.04
7    07374346000107  0000014263     401.28
8    07374346000107  0000014279     391.26
9    02364118000124  0000015263   37353.10
10   02364118000124  0000015264   56214.14

df1.dtypes的输出:

cnpj        object
num_doc     object
bc_icms    float64
dtype: object

所以....我正在尝试创建一个数据透视表来回答以下问题:

  

每个sum bc_icms的{​​{1}}是什么?

这就是我写的:

cnpj

这是输出:

indexes = [np.array(df1['cnpj']), np.array(df1['num_doc'])]
pt1 = pd.DataFrame(df1['bc_icms'], index=indexes)
print pt1

我认为这是我想要的数据透视表结构!好!但...

  

如何修复这些NaN?

     

如何为每个cnpj创建一个“sum”行?

Excel中的示例:

example

1 个答案:

答案 0 :(得分:6)

IIUC,您需要每个cnpj值的总和,因此我将使用groupby作为:

g = df.groupby('cnpj')['bc_icms'].sum().reset_index(name='sum')

返回:

             cnpj        sum
0   2364118000124   93567.24
1   2817342000124   17827.07
2   7374346000107    1497.70
3   8953538000122     686.00
4  54921580000189  108000.00

希望有所帮助。

编辑:

你也可以使用:

g = df.groupby(['cnpj','num_doc'])['bc_icms'].sum()

返回完整的数据帧:

cnpj            num_doc
2364118000124   15263       37353.10
                15264       56214.14
2817342000124   10154       17827.07
7374346000107   14224         320.12
                14231         385.04
                14263         401.28
                14279         391.26
8953538000122   12865         686.00
54921580000189  112428     108000.00