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

dot*_*.Py 2 python pivot-table pandas

我的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
Run Code Online (Sandbox Code Playgroud)

输出df1.dtypes:

cnpj        object
num_doc     object
bc_icms    float64
dtype: object
Run Code Online (Sandbox Code Playgroud)

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

什么是sumbc_icms每一个cnpj

这就是我写的:

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

这是输出:

                           bc_icms
02817342000124 0000010154      NaN
54921580000189 0000112428      NaN
08953538000122 0000012865      NaN
               0000012865      NaN
               0000012865      NaN
07374346000107 0000014224      NaN
               0000014231      NaN
               0000014263      NaN
               0000014279      NaN
02364118000124 0000015263      NaN
               0000015264      NaN
               0000015265      NaN
07720786000160 0000020128      NaN
Run Code Online (Sandbox Code Playgroud)

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

我该如何修复这些NaN?

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

Excel中的示例:

例

Fab*_*nna 6

IIUC,你需要每个cnpj值的总和,所以我会使用groupby作为:

g = df.groupby('cnpj')['bc_icms'].sum().reset_index(name='sum')
Run Code Online (Sandbox Code Playgroud)

返回:

             cnpj        sum
0   2364118000124   93567.24
1   2817342000124   17827.07
2   7374346000107    1497.70
3   8953538000122     686.00
4  54921580000189  108000.00
Run Code Online (Sandbox Code Playgroud)

希望有所帮助.

编辑:

你也可以用:

g = df.groupby(['cnpj','num_doc'])['bc_icms'].sum()
Run Code Online (Sandbox Code Playgroud)

返回完整的数据帧:

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
Run Code Online (Sandbox Code Playgroud)