替换列中的值,使用另一列中的某些值,忽略任何' nan'项

时间:2017-01-27 16:04:50

标签: python pandas replace

我有以下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

2 个答案:

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

请参阅boolean indexingnotnull

上的文档

答案 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'])