将熊猫连接的列后缀转换为MultiIndex

时间:2018-11-02 20:46:00

标签: python pandas

我有两个具有相同索引和列名称的pandas DataFrame。

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

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

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

>>> 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

但是我想要在“ 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

有没有办法将两个原始DataFrame合并以获得所需的DataFrame?

2 个答案:

答案 0 :(得分:3)

您可以沿第一个轴将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

答案 1 :(得分:0)

对于那些希望将两个具有不同索引或列的数据帧连接到多索引表中的更普遍问题的答案的人:

deploy:
  resources:
    limits:
      cpus: <cpu_limit>
      memory: <mem_limit>

示例:

df_L = pd.concat([df_L], keys=["L"], axis=1)
df_R = pd.concat([df_R], keys=["R"], axis=1)
df = df_L.join(df_R)

# Reorder levels if needed:
df = df.reorder_levels([1,0], axis=1).sort_index(axis=1)

这也解决了索引和列相等的OP的特殊情况。