Python 多级数据帧融合
我有以下数据帧结构:Python 多级数据帧融合,python,python-3.x,pandas,dataframe,Python,Python 3.x,Pandas,Dataframe,我有以下数据帧结构: 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
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
我想融化数据帧并获得以下结构:
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
代码:
上面的代码将我带到了旋转帧,原始帧是所需的输出。所以基本上,我旋转了一个数据帧,现在想把它融化,使它回到相同的结构
原始数据帧:
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)
或
例子
东方明珠
您的代码:
df2 = df_in.pivot_table(index =
['Example1','Example2'],columns='VC', values=
['Weight','Rank']).reset_index()
df2['Difference'] = (df2['Rank']['X']-df2['Rank']['Y'])
df2
重塑:
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
您可以添加一些代码来生成这些数据帧吗。像这样复制您的数据对我们来说并不容易。谢谢@COLDSPEED添加了一些代码,如果有帮助,请告诉我。@howardroark您可以添加原始数据帧/代码来生成数据帧,这样我们就可以使用您的代码来获取数据透视了吗?@COLDSPEED添加了原始帧。为什么不保持原始数据帧不变,并将数据透视指定给其他命名对象?这避免了数据争回到原始状态。它会丢失其整体上的VC列记录,从而得到相同的结果。问题是dropna(),分配给VC对应列的值是NA。因此,使用dropna()将删除VC列values@howardroark我无法复制您丢失的VC问题。您是否可以尝试将权重x或y的值添加为NaN。这应该重现这个问题。谢谢您可能希望更新您的答案以支持NaN。这对我有帮助。为NaN的df.fillna(999999).stack(1).groupby(level=0).bfill().dropna().reset_index().drop('level_0',axis=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