我有以下pandas数据帧:
A B C D
2 a 1 F
4 b 2 G
6 b 3 nan
1 c 4 G
5 c 5 nan
7 d 6 H
我想用D列中的值替换B列中的任何值,而不是为' nan' D栏中的条目。
期望的输出:
A B C D
2 F 1 F
4 G 2 G
6 b 3 nan
1 G 4 G
5 c 5 nan
7 H 6 H
答案 0 :(得分:2)
您可以使用布尔掩码屏蔽感兴趣的行,并将其传递给loc
,以便只覆盖那些行:
In [3]:
df.loc[df['D'].notnull(), 'B'] = df['D']
df
Out[3]:
A B C D
0 2 F 1 F
1 4 G 2 G
2 6 b 3 NaN
3 1 G 4 G
4 5 c 5 NaN
5 7 H 6 H
上的文档
答案 1 :(得分:1)
几种替代解决方案:
In [72]: df['B'] = df['D'].combine_first(df['B'])
In [73]: df
Out[73]:
A B C D
0 2 F 1 F
1 4 G 2 G
2 6 b 3 NaN
3 1 G 4 G
4 5 c 5 NaN
5 7 H 6 H
或:
df['B'] = df['D'].fillna(df['B'])
或:
df['B'] = df['D'].mask(df['D'].isnull(), df['B'])
或:
df['B'] = df['D'].where(df['D'].notnull(), df['B'])
或:
df['B'] = np.where(df['D'].notnull(), df['D'], df['B'])