Python 如何使用Pandas数据框创建显示组值总和()的透视表?
MyPython 如何使用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
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'))