<p>如果将其全部转换为长格式,则更容易:</p>
<pre><code>>>> striking = df_striking.filter(regex='KW[0-9]*$').stack().rename('Keyword').reset_index()
>>> joined = striking.merge(df_keyword_vol)
>>> joined
level_0 level_1 Keyword Volume
0 0 KW1 nectarine 1000
1 0 KW2 apple 600
2 0 KW3 banana 450
3 0 KW4 kiwi 1200
4 0 KW5 raspberry 400
5 1 KW1 apricot 500
6 1 KW2 orange 800
7 1 KW3 grapefruit 10
8 1 KW4 lemon 150
9 1 KW5 blueberry 850
10 2 KW1 plum 200
11 2 KW2 pear 1000
12 2 KW3 cherry 900
13 2 KW4 peach 700
14 2 KW5 berries 1000
</code></pre>
<p>然后,您可以使用<code>.pivot</code>获取原始格式,但使用多索引作为列:</p>
<pre><code>>>> joined.pivot('index', 'level_1', ['Keyword', 'Volume'])
Keyword Volume
level_1 KW1 KW2 KW3 KW4 KW5 KW1 KW2 KW3 KW4 KW5
index
0 nectarine apple banana kiwi raspberry 1000 600 450 1200 400
1 apricot orange grapefruit lemon blueberry 500 800 10 150 850
2 plum pear cherry peach berries 200 1000 900 700 1000
</code></pre>
<p>我们可以通过<code>pd.concat</code>绕过这种奇怪的格式:</p>
<pre><code>>>> pd.concat([
... joined.pivot('index', 'level_1', 'Keyword'),
... joined.pivot('index', 'level_1', 'Volume').add_suffix(' Vol')
... ], axis='columns').sort_index(axis='columns')
level_1 KW1 KW1 Vol KW2 KW2 Vol KW3 KW3 Vol KW4 KW4 Vol KW5 KW5 Vol
index
0 nectarine 1000 apple 600 banana 450 kiwi 1200 raspberry 400
1 apricot 500 orange 800 grapefruit 10 lemon 150 blueberry 850
2 plum 200 pear 1000 cherry 900 peach 700 berries 1000
</code></pre>