我有一个像这样的数据框(示例)
import pandas as pd
df = pd.DataFrame({'m': [101, 102, 106, 107, 109, 114, 115, 115, 119, 121, 123, 124, 124, 124, 128, 130, 130, 133, 137, 140],
'o': [103132, 103297, 102485, 106034, 109479, 101807, 106092, 101948, 100192, 105655, 104533, 107595, 109580, 104427, 110054, 106281, 102007, 104165, 109145, 108300],
'code': [307, 308, 306, 307, 306, 306, 307, 307, 306, 307, 303, 308, 307, 307, 307, 306, 307, 304, 308, 309],
'time': [105.5, 50.1, 15.52, 224.32, 10.3, 30.4, 170.9, 140.6, 17.6, 180.9, 45.05, 395.2, 120.9, 200.8, 225.0, 30.9, 180.9, 25.5, 15.3, 100.4]
})
我想将m
和code
分组,而count
和sum
的值time
我有这个,因为代码需要是一列
pd.pivot_table(
df,
index=['m'],
columns=['code'],
aggfunc={"time":['sum','size']},
fill_value=0
)
此返回此
time
size sum
code 303 304 306 307 308 309 303 304 306 307 308 309
m
101 0 0 0 1 0 0 0.00 0.0 0.00 105.50 0.0 0.0
102 0 0 0 0 1 0 0.00 0.0 0.00 0.00 50.1 0.0
106 0 0 1 0 0 0 0.00 0.0 15.52 0.00 0.0 0.0
107 0 0 0 1 0 0 0.00 0.0 0.00 224.32 0.0 0.0
109 0 0 1 0 0 0 0.00 0.0 10.30 0.00 0.0 0.0
114 0 0 1 0 0 0 0.00 0.0 30.40 0.00 0.0 0.0
115 0 0 0 2 0 0 0.00 0.0 0.00 311.50 0.0 0.0
119 0 0 1 0 0 0 0.00 0.0 17.60 0.00 0.0 0.0
121 0 0 0 1 0 0 0.00 0.0 0.00 180.90 0.0 0.0
123 1 0 0 0 0 0 45.05 0.0 0.00 0.00 0.0 0.0
124 0 0 0 2 1 0 0.00 0.0 0.00 321.70 395.2 0.0
128 0 0 0 1 0 0 0.00 0.0 0.00 225.00 0.0 0.0
130 0 0 1 1 0 0 0.00 0.0 30.90 180.90 0.0 0.0
133 0 1 0 0 0 0 0.00 25.5 0.00 0.00 0.0 0.0
137 0 0 0 0 1 0 0.00 0.0 0.00 0.00 15.3 0.0
140 0 0 0 0 0 1 0.00 0.0 0.00 0.00 0.0 100.4
但是我希望两列具有相同的code
,没有一个具有size
值的部分,而没有一个具有sum
值的部分
例如,这个
time
303 304 306 307 308 309
code sum size sum size sum size sum size sum size sum size
m
101 0.00 0 0.00 0 0.00 0 105.50 1 0.00 0 0.00 0
102 0.00 0 0.00 0 0.00 0 0.00 0 50.1 1 0.00 0
我认为可以反转列索引,但是不知道
答案 0 :(得分:1)
使用swaplevel
+ sort_index
pd.pivot_table(
df,
index=['m'],
columns=['code'],
aggfunc={"time":['sum','size']},
fill_value=0
).swaplevel(2,1,axis=1).sort_index(level=[0,1],axis=1)