<p>像下面这样的</p>
<pre><code>import pandas as pd
#dummy main data
main_df = pd.DataFrame({
'topic': ['top1', 'top2', 'top4'],
'cat': ['cat1', 'cat3', 'cat4'],
})
#dummy values data
values_df = pd.DataFrame({
'cat': ['cat1', 'cat2', 'cat3', 'cat4', 'cat5', 'cat6'],
'top1': [10, 1, 2, 3, 4, 5],
'top2': [5, 4, 3, 2, 1, 6],
'top3': [2, 2, 1, 3, 5, 3],
'top4': [3, 4, 1, 2, 3, 6],
'top5': [1, 3, 2, 5, 4, 7],
})
</code></pre>
<p><code>melt</code>在<code>values_df</code>之前,我们需要为<code>values_df</code>快速创建列标题:</p>
<pre><code>cols_label = ['top' + str(x) for x in range(1, 6)]
</code></pre>
<p>在您的情况下,<code>range(1, 6)</code>应该是<code>range(1, 31)</code></p>
<p>融化<code>values_df</code>:</p>
<pre><code>values_df = values_df.melt(id_vars=['cat'], value_vars=cols_label)
</code></pre>
<p>这将为我们提供以下信息:</p>
<p><a href="https://i.stack.imgur.com/x4DJM.png" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/x4DJM.png" alt="enter image description here"/></a></p>
<p>然后,合并主值和值:</p>
<pre><code>merged = main_df.merge(values_df, how='left', left_on=['cat', 'topic'], right_on=['cat', 'variable']).drop('variable', axis=1)
</code></pre>
<p>以下是最终结果:</p>
<p><a href="https://i.stack.imgur.com/QWgJP.png" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/QWgJP.png" alt="enter image description here"/></a></p>