<pre><code>df1 = pd.DataFrame(
{'a': [2., 1.3, 1.4], 'b': [np.nan, 2.2, np.nan], 'c': [1.1, 2., np.nan]},
index=['item0', 'item1', 'item2']
)
df2 = pd.DataFrame(
{'a': ['foo', 'bar', 'foo'], 'b': ['bar', 'foo', 'foo'], 'c': ['bar'] * 3},
index=['item0', 'item1', 'item2']
)
df1.columns = pd.MultiIndex.from_product([df1, ['prop1']])
df2.columns = pd.MultiIndex.from_product([df2, ['prop2']])
>>> pd.concat([df1, df2], axis=1).sort_index(axis=1, level=0)
a b c
prop1 prop2 prop1 prop2 prop1 prop2
item0 2.0 foo NaN bar 1.1 bar
item1 1.3 bar 2.2 foo 2.0 bar
item2 1.4 foo NaN foo NaN bar
</code></pre>
<p>或者,连接数据帧(假设它们具有相同的列),分配一个新的多索引,然后恢复到原始顺序:</p>
<pre><code>df = pd.concat([df1, df2], axis=1)
df.columns = pd.MultiIndex.from_tuples(product(['prop1', 'prop2'], df1))
df = df.swaplevel(0, 1, axis=1)[product(df1, ['prop1', 'prop2'])]
</code></pre>
<p>或者根据@ALollz使用的<code>keys</code>参数:</p>
<pre><code>keys = ['prop1', 'prop2']
df = pd.concat([df1, df2], axis=1, keys=keys)
df = df.swaplevel(0, 1, axis=1)[product(df1, keys)]
</code></pre>