我有以下dataframe
import pandas as pd
df = pd.DataFrame({'id':[1,2,3,4,5,6], 'id_2':[6,5,4,3,2,1],
'col_1':['A','A','A','B','B','B'],
'col_2':['X','Z','X','Z','X','Z'],
'value':[10,20,30,40,50,60]})
我想dcast
,所以我用
df= df.pivot_table(index=['id','id_2'], columns=['col_1', 'col_2'],aggfunc=lambda x: x)
我不知道如何droplevel
并将df.columns
更改为A_X,A_Z,B_X,B_Z
。 multi-index
使我感到困惑
有什么想法吗?
更新
我想结束
import numpy as np
df=pd.DataFrame({'id':[1,2,3,4,5,6], 'id_2':[6,5,4,3,2,1],
'A_X':[10,np.nan,30,np.nan,np.nan,np.nan],
'A_Z':[np.nan,20,np.nan,np.nan,np.nan,np.nan],
'B_X':[np.nan,np.nan,np.nan,np.nan,50,np.nan],
'B_Z':[np.nan,np.nan,np.nan,40,np.nan,60]})
答案 0 :(得分:3)
您需要通过Index.droplevel
或具有列表理解力,从{
"eno1": {
"ip_address": "10.153.243.19",
"prefix": 24,
"mac": "c8:1f:66:b7:f9:0c",
"state": "UP"
},
"eno2": {
"ip_address": "NULL",
"prefix": 0,
"mac": "c8:1f:66:b7:f9:0d",
"state": "DOWN"
}
}
删除顶级value
:
Multiindex
或者:
print (df.columns)
MultiIndex(levels=[['value'], ['A', 'B'], ['X', 'Z']],
codes=[[0, 0, 0, 0], [0, 0, 1, 1], [0, 1, 0, 1]],
names=[None, 'col_1', 'col_2'])
df.columns = df.columns.droplevel(0).map('_'.join)
df.columns = [f'{b}_{c}' for a,b,c in df.columns]
另一种解决方案是在df = df.reset_index()
print (df)
id id_2 A_X A_Z B_X B_Z
0 1 6 10.0 NaN NaN NaN
1 2 5 NaN 20.0 NaN NaN
2 3 4 30.0 NaN NaN NaN
3 4 3 NaN NaN NaN 40.0
4 5 2 NaN NaN 50.0 NaN
5 6 1 NaN NaN NaN 60.0
中指定value
参数:
pivot_table
答案 1 :(得分:2)
df2 = (df.pivot_table(index=['id','id_2'], columns=['col_1', 'col_2'],
values='value')
.reset_index()
)
输出:
id id_2 A B
X Z X Z
0 1 6 10.0 NaN NaN NaN
1 2 5 NaN 20.0 NaN NaN
2 3 4 30.0 NaN NaN NaN
3 4 3 NaN NaN NaN 40.0
4 5 2 NaN NaN 50.0 NaN
5 6 1 NaN NaN NaN 60.0