<p>让我们试试:</p>
<pre><code>df['Codes'] = [[*i] for i in df['Code']]
df_level = df['Code'].str.extractall('(.)')[0].unstack('match', fill_value='')
df_level = df_level.cumsum(axis=1).mask(df_level == '')
s_map = df.explode('Codes').drop_duplicates('Code', keep='last').set_index('Code')['Name']
df_level.columns = [f'Level{i+1}' for i in df_level.columns]
df_level_names = pd.concat([df_level[i].map(s_map) for i in df_level.columns],
axis=1,
keys=df_level.columns+'Name')
df_out = df.join([df_level, df_level_names]).drop('Codes', axis=1)
df_out
</code></pre>
<p>输出:</p>
<pre><code> Code Name Level1 Level2 Level3 Level1Name Level2Name Level3Name
0 A USA A NaN NaN USA NaN NaN
1 AM Massachusetts A AM NaN USA Massachusetts NaN
2 AMB Boston A AM AMB USA Massachusetts Boston
3 AMS Springfield A AM AMS USA Massachusetts Springfield
4 D Germany D NaN NaN Germany NaN NaN
5 DB Brandenburg D DB NaN Germany Brandenburg NaN
6 DBB Berlin D DB DBB Germany Brandenburg Berlin
7 DBD Dresden D DB DBD Germany Brandenburg Dresden
</code></pre>