我有两个具有相同索引和列名称的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?
答案 0 :(得分:3)
您可以沿第一个轴将pd.concat
与keys
参数一起使用:
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的特殊情况。