我有一个透视的多级熊猫数据帧结构:
Example1 Example2 Weight Rank Difference
VC X Y X Y
0 ABC XYZ 1 2 1 2 0
1 PQR BCD 3 4 3 4 1
我想融化数据框并获得以下结构:
VC Example1 Example2 Weight Rank Difference
X ABC XYZ 1 1 0
Y ABC XYZ 2 2 0
X PQR BCD 3 3 1
Y PQR BCD 4 4 1
法典:
df = df.pivot_table(index =
['Example1','Example2'],columns='VC', values=
['Weight','Rank']).reset_index()
df['Difference'] = (df['rank']['X']-df['rank']['Y'])
上面的代码让我到了枢轴帧,原始帧是所需的输出。所以基本上,我透视了一个数据帧,现在想要融化它以使其恢复到相同的结构。
原始数据帧:
VC Example1 Example2 Weight Rank
X ABC XYZ 1 1
Y ABC XYZ 2 2
X PQR BCD 3 3
Y PQR BCD 4 4
任何帮助不胜感激!谢谢!
IIUC,我认为你需要stack
,groupby
,ffill
:
df2.stack(1).groupby(level=0).ffill().dropna().reset_index().drop('level_0', axis=1)
或
df.fillna(9999999).stack(1).groupby(level=0).bfill().dropna().reset_index().drop('level_0', axis=1)
例
df_in
VC Example1 Example2 Weight Rank
0 X ABC XYZ 1 1
1 Y ABC XYZ 2 2
2 X PQR BCD 3 3
3 Y PQR BCD 4 4
您的代码:
df2 = df_in.pivot_table(index =
['Example1','Example2'],columns='VC', values=
['Weight','Rank']).reset_index()
df2['Difference'] = (df2['Rank']['X']-df2['Rank']['Y'])
DF2
Example1 Example2 Rank Weight Difference
VC X Y X Y
0 ABC XYZ 1 2 1 2 -1
1 PQR BCD 3 4 3 4 -1
重塑:
df2.stack(1).groupby(level=0).ffill().dropna().reset_index().drop('level_0', axis=1)
输出:
VC Difference Example1 Example2 Rank Weight
0 X -1.0 ABC XYZ 1.0 1.0
1 Y -1.0 ABC XYZ 2.0 2.0
2 X -1.0 PQR BCD 3.0 3.0
3 Y -1.0 PQR BCD 4.0 4.0