熊猫-用另一列中的字符串填充NaN

时间:2020-10-07 23:49:59

标签: python pandas

我有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函数,但不确定如何开始/做什么。

2 个答案:

答案 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