我有2列(“姓氏”和“邮政编码”)。数据框已经过过滤,只包含重复的姓氏:
Surname | PostCode
Adams | NaN
Adams | NaN
Bryan | NX203
Bryan | NaN
Cormack | NaN
Cormack | NaN
Cormack | NZ233
Dylan | NaN
Dylan | NaN
Dylan | NaN
其中一些根本没有邮政编码。但是,对于那些拥有的人,我想用所有存在的东西来填写。例如,包含“ Bryan”的第二行应使用NX203填充(就像上面的行一样)。同样,Cormack的其他两个实例也应填充NZ233。
我不知道从哪里开始。我认为它必须是应用于每行的python函数,但不确定如何开始/做什么。
答案 0 :(得分:1)
让我们尝试groupby().transform()
:
df['PostCode'] = df.groupby('Surname').PostCode.transform('first')
输出:
Surname PostCode
0 Adams NaN
1 Adams NaN
2 Bryan NX203
3 Bryan NX203
4 Cormack NZ233
5 Cormack NZ233
6 Cormack NZ233
7 Dylan NaN
8 Dylan NaN
9 Dylan NaN
答案 1 :(得分:1)
另一种方法,先groupby(), ffill
,然后再bfill
df['PostCode'] =df.groupby('Surname').PostCode.apply(lambda x:x.ffill().bfill())
Surname PostCode
0 Adams NaN
1 Adams NaN
2 Bryan NX203
3 Bryan NX203
4 Cormack NZ233
5 Cormack NZ233
6 Cormack NZ233
7 Dylan NaN
8 Dylan NaN
9 Dylan NaN