<p>这里有一种使用<code>wide_to_long</code>的方法</p>
<pre><code>df=df.rename({'name':'previous_name0'})
s=pd.wide_to_long(df,['previous'],i=['postal_code','country','city'],j='old_name_flag',sep='_',suffix='\w+').reset_index()
s=s[s.previous.notnull()]
s['old_name_flag']=s['old_name_flag'].ne('name0').astype(int)
s
Out[147]:
postal_code country city old_name_flag previous
0 1410 BEL Brussels 0 Nitron
1 1410 BEL Brussels 1 Rotory
3 1410 BEL Brussels 1 Datec
4 1020 ENG NaN 0 Pulset
6 1020 ENG NaN 1 Cmotor
8 1310 JPN NaN 0 Rotaxi
9 1310 JPN NaN 1 Datec
</code></pre>
<p>或者我们从你的df1开始</p>
<pre><code>df1['old_name_flag']=df.groupby(['postal_code','country']).cumcount().ne(0).astype(int)
df1
Out[152]:
postal_code country city name old_name_flag
0 1410 BEL Brussels Nitron 0
1 1410 BEL Brussels Rotory 1
2 1410 BEL Brussels Datec 1
3 1020 ENG NaN Pulset 0
4 1020 ENG NaN Cmotor 1
5 1310 JPN NaN Rotaxi 0
6 1310 JPN NaN Datec 1
</code></pre>