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)
所以....我正在尝试创建一个数据透视表来回答以下问题:
什么是
sum的bc_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中的示例:
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)