<p>您可以通过将<code>Values_df</code>通过<a href="https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.melt.html" rel="nofollow noreferrer">^{<cd3>}</a>熔化来从<code>Values_df</code>进行映射,然后在<code>topic</code>列和<code>cat</code>列通过<a href="https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.set_index.html" rel="nofollow noreferrer">^{<cd6>}</a>设置索引,并指定列<code>value</code>(列<code>value</code>由<a href="https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.melt.html" rel="nofollow noreferrer">^{<cd3>}</a>生成)</p>
<p>然后,在<code>Main</code>数据帧上,为每一行获取一个<code>topic</code>和<code>cat</code>元组,作为一个复合键,用于匹配由<a href="https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.Series.map.html" rel="nofollow noreferrer">^{<cd13>}</a>创建的映射,如下所示:</p>
<pre><code>mapping = Values_df.melt(id_vars='cat', var_name='topic').set_index(['topic', 'cat'])['value']
Main['Value'] = Main[['topic', 'cat']].apply(tuple, axis=1).map(mapping)
</code></pre>
<p><strong>数据输入</strong></p>
<pre><code>Main = pd.DataFrame({'topic': ['top1', 'top2', 'top4'], 'cat': ['cat1', 'cat3', 'cat4']})
topic cat
0 top1 cat1
1 top2 cat3
2 top4 cat4
data = {'cat': ['cat1', 'cat2', 'cat3', 'cat4', 'cat80'],
'top1': [0, 1, 2, 5, 2],
'top2': [1, 1, 4, 2, 7],
'top3': [2, 1, 3, 1, 4],
'top4': [2, 1, 3, 1, 9]}
Values_df = pd.DataFrame(data)
cat top1 top2 top3 top4
0 cat1 0 1 2 2
1 cat2 1 1 1 1
2 cat3 2 4 3 3
3 cat4 5 2 1 1
4 cat80 2 7 4 9
</code></pre>
<p><strong>已创建映射:</strong></p>
<pre><code>print(mapping)
topic cat
top1 cat1 0
cat2 1
cat3 2
cat4 5
cat80 2
top2 cat1 1
cat2 1
cat3 4
cat4 2
cat80 7
top3 cat1 2
cat2 1
cat3 3
cat4 1
cat80 4
top4 cat1 2
cat2 1
cat3 3
cat4 1
cat80 9
Name: value, dtype: int64
</code></pre>
<p><strong>结果:</strong></p>
<pre><code>print(Main)
topic cat Value
0 top1 cat1 0
1 top2 cat3 4
2 top4 cat4 1
</code></pre>