<p>尝试使用<a href="https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.wide_to_long.html" rel="nofollow noreferrer">^{<cd1>}</a>来重塑数据帧<code>modal2</code>,然后使用<a href="https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.merge.html" rel="nofollow noreferrer">^{<cd3>}</a>{<cd4>}来保持<code>df_ia</code>的顺序:</p>
<pre><code>df_long = pd.wide_to_long(modal2, stubnames='month',
i='Mode', j='RevalMonth_plus').reset_index()
new_df = df_ia.merge(
df_long,
how='left',
on=['RevalMonth_plus', 'Mode']
).rename(columns={'month': 'dynamic_month_value'})
</code></pre>
<p><code>new_df</code>:</p>
<pre><code> RevalMonth_plus Mode dynamic_month_value
0 1 602 0
1 1 100 0
2 4 100 0
3 1 802 0
4 4 603 1
5 4 603 1
6 4 603 1
7 1 100 0
</code></pre>
<hr/>
<p>具有唯一值以更清楚地显示映射的示例:</p>
<pre><code>modal2 = pd.DataFrame({
'Mode': [100, 602, 603, 802],
'month1': [1, 2, 3, 4],
'month4': [5, 6, 7, 8]
})
df_ia = pd.DataFrame({
'RevalMonth_plus': [1, 1, 4, 1, 4, 4, 4, 1],
'Mode': [602, 100, 100, 802, 603, 603, 603, 100]
})
</code></pre>
<p><code>modal2</code>:</p>
<pre><code> Mode month1 month4
0 100 1 5
1 602 2 6
2 603 3 7
3 802 4 8
</code></pre>
<p><code>df_ia</code>:</p>
<pre><code> RevalMonth_plus Mode
0 1 602
1 1 100
2 4 100
3 1 802
4 4 603
5 4 603
6 4 603
7 1 100
</code></pre>
<p><code>new_df</code>:</p>
<pre><code> RevalMonth_plus Mode dynamic_month_value
0 1 602 2
1 1 100 1
2 4 100 5
3 1 802 4
4 4 603 7
5 4 603 7
6 4 603 7
7 1 100 1
</code></pre>
<hr/>
<p>所有月份列都可以首先用<code>merge</code>进行映射:</p>
<pre><code># Merge left to bring all Month columns into new_df
new_df = df_ia.merge(modal2, on='Mode', how='left')
df_long = pd.wide_to_long(modal2, stubnames='month',
i='Mode', j='RevalMonth_plus').reset_index()
new_df = new_df.merge(
df_long,
how='left',
on=['RevalMonth_plus', 'Mode']
).rename(columns={'month': 'dynamic_month_value'})
</code></pre>
<pre><code> RevalMonth_plus Mode month1 month4 dynamic_month_value
0 1 602 2 6 2
1 1 100 1 5 1
2 4 100 1 5 5
3 1 802 4 8 4
4 4 603 3 7 7
5 4 603 3 7 7
6 4 603 3 7 7
7 1 100 1 5 1
</code></pre>