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

Python 如何使用Pandas数据框创建显示组值总和()的透视表?,python,pandas,pivot-table,Python,Pandas,Pivot Table,Mydf1: 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 0000012

My
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.d类型的输出

cnpj        object
num_doc     object
bc_icms    float64
dtype: object
所以。。。。我试图创建一个透视表来回答以下问题:

每个
cnpj
bc_icms
总和是多少

这就是我写的:

indexes = [np.array(df1['cnpj']), np.array(df1['num_doc'])]
pt1 = pd.DataFrame(df1['bc_icms'], index=indexes)
print pt1
以下是输出:

                           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
我想这就是我想要的透视表结构!好!!但是

我怎样才能修好这些NaN的

如何为每个cnpj创建“总和”行

Excel中的示例:


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

我想我应该用“aggfunc”,但我不知道怎么用。。。然而,这正是我想要的!!非常感谢,法比奥!关于此解决方案的另一个问题-是否可以使用agg函数计算多个聚合统计数据(如总和、平均值和中值),然后一次性重置索引并重命名列?例如:g=df.groupby('cnpj')['bc_icms'].agg({sum,mean}).reset_index(name={'cnpj_sum','cnpj_mean'))