Python 如何用另一个匹配行的结果填充NAN?

Python 如何用另一个匹配行的结果填充NAN?,python,pandas,dataframe,Python,Pandas,Dataframe,我有一个数据帧的格式 USER | ADDRESS | PURCHASE 1 | add 1 | A 1 | NaN | B 2 | NaN | C 2 | add 2 | D 3 | NaN | E 对于用户1,我想用add1填充NaN行中的地址,对于NaN行,我想对用户2做同样的操作。我不想分组,我想保留4行格式。我只是想填一下地址。对于没有匹配项的用户3,我想将其保留为NaN 我曾尝试过使用groupby用户,但最终

我有一个数据帧的格式

USER | ADDRESS | PURCHASE
1    | add 1   |  A
1    | NaN     |  B
2    | NaN     |  C
2    | add 2   |  D
3    | NaN     |  E
对于用户1,我想用add1填充NaN行中的地址,对于NaN行,我想对用户2做同样的操作。我不想分组,我想保留4行格式。我只是想填一下地址。对于没有匹配项的用户3,我想将其保留为NaN

我曾尝试过使用groupby用户,但最终填充了所有内容并将所有内容组合在一起,这不是我想要的

无代码


我只想相应地填写每个用户的地址

df['ADDRESS']=np.where(df['ADDRESS'].isnull())、df['PURCHASE']、df['ADDRESS'])

我不确定分组有什么问题,但当你想“按组”填写缺失的值时,你需要使用groupby

df['ADDRESS'] = df.groupby('USER').ADDRESS.apply(lambda x: x.ffill().bfill())

   USER ADDRESS PURCHASE
0   1   add 1   A
1   1   add 1   B
2   2   add 2   C
3   2   add 2   D
4   3   NaN     E

如果您的列表是按用户id排序的,则这是重复的:请尝试
df['ADDRESS']=df['ADDRESS'].ffill()
如果
用户有多个地址,会发生什么情况?是否需要以任何特定方式填写?如果存在nan,则将在地址列中填写采购,不使用上面的地址。如果地址为空,则此解决方案返回采购数据,否则返回地址。您还可以将“.isnull()”替换为“=='NaN'”