根据 Pandas 中两列之间的匹配查找值

Look up values based on match between two columns in Pandas

我有这个数据

import pandas as pd

data = {'Code':  ['20','22','21','21','21','21','20','20','20','20'],
        'Code2': ['1', '5', '2', '', '2', '2', '1', '', '1', '1']}

df = pd.DataFrame (data, columns = ['Code','Code2'])


   Code Code2
0   20  1
1   22  5
2   21  2
3   21  
4   21  2
5   21  2
6   20  1
7   20  
8   20  1
9   20  1

我正在尝试根据之前的关联来填充 Code2 中的缺失值。所以,我知道当Code为20时,Code2为1,当Code为21时,Code2为2。 我的输出应该是这样的:

  Code  Code2
0   20  1
1   22  5
2   21  2
3   21  2
4   21  2
5   21  2
6   20  1
7   20  1
8   20  1
9   20  1

我想我可以使用一些连接来做到这一点,但如果可能的话我会热衷于使用一个衬垫。

您可以使用 groupby.ffill:

df['Code2'] = df.Code2.replace('',np.nan).groupby(df.Code).ffill()

输出:

  Code Code2
0   20     1
1   22     5
2   21     2
3   21     2
4   21     2
5   21     2
6   20     1
7   20     1
8   20     1
9   20     1

使用drop_duplicatesmap:

data = {'Code':  ['20','22','21','21','21','21','20','20','20','20'],
        'Code2': ['1', '5', '2', '', '2', '2', '1', '', '1', '1']}

df = pd.DataFrame (data, columns = ['Code','Code2'])

m = df.drop_duplicates('Code').set_index('Code')['Code2']

df['Code2'] = df['Code'].map(m)
df

输出:

  Code Code2
0   20     1
1   22     5
2   21     2
3   21     2
4   21     2
5   21     2
6   20     1
7   20     1
8   20     1
9   20     1

使用 groupby 并使用 first:

转换列 Code2
df['Code2'] = df['Code2'].replace('', np.nan).groupby(df['Code']).transform('first')

结果:

  Code Code2
0   20     1
1   22     5
2   21     2
3   21     2
4   21     2
5   21     2
6   20     1
7   20     1
8   20     1
9   20     1