Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 多级数据帧融合_Python_Python 3.x_Pandas_Dataframe - Fatal编程技术网

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