将 Pandas join 中的列后缀转换为 MultiIndex

Ver*_*ion 7 python pandas

我有两个具有(不一定)相同索引和列名的 Pandas DataFrame。

>>> df_L = pd.DataFrame({'X': [1, 3], 
                         'Y': [5, 7]})

>>> df_R = pd.DataFrame({'X': [2, 4], 
                         'Y': [6, 8]})
Run Code Online (Sandbox Code Playgroud)

我可以将它们连接在一起并分配后缀。

>>> df_L.join(df_R, lsuffix='_L', rsuffix='_R')

    X_L Y_L X_R Y_R
0   1   5   2   6
1   3   7   4   8
Run Code Online (Sandbox Code Playgroud)

但我想要的是在“X”和“Y”下制作“L”和“R”子列。

所需的 DataFrame 如下所示:

>>> pd.DataFrame(columns=pd.MultiIndex.from_product([['X', 'Y'], ['L', 'R']]), 
         data=[[1, 5, 2, 6],
               [3, 7, 4, 8]])

    X       Y
    L   R   L   R
0   1   5   2   6
1   3   7   4   8
Run Code Online (Sandbox Code Playgroud)

有没有办法可以组合两个原始数据帧来获得所需的数据帧?

sac*_*cuL 8

您可以沿第一个轴pd.concatkeys参数一起使用:

df = pd.concat([df_L, df_R], keys=['L','R'],axis=1).swaplevel(0,1,axis=1).sort_index(level=0, axis=1)

>>> df
   X     Y   
   L  R  L  R
0  1  2  5  6
1  3  4  7  8
Run Code Online (Sandbox Code Playgroud)

  • 这假设 df_L 和 df_R 具有相同的行数(可能还有列)。如果 df_L 和 df_R 的形状不匹配怎么办? (6认同)