我有以下带有一些缺失值的数据框:
A B
0 63.0 9.0
1 NaN 35.0
2 51.0 95.0
3 25.0 11.0
4 91.0 NaN
5 2.0 47.0
6 37.0 10.0
7 NaN 88.0
8 75.0 87.0
9 92.0 21.0
我想根据以上两列的条件创建一个新列:
df['C'] = numpy.where((df['A']>55) | (df['B']>55), "Yes", "No")
这有效但没有考虑缺失值:
A B C
0 63.0 9.0 Yes
1 NaN 35.0 No
2 51.0 95.0 Yes
3 25.0 11.0 No
4 91.0 NaN Yes
5 2.0 47.0 No
6 37.0 10.0 No
7 NaN 88.0 Yes
8 75.0 87.0 Yes
9 92.0 21.0 Yes
为了纠正缺失值,我必须运行以下代码:
df['C'] = numpy.where((df['A'].isnull()) | (df['B'].isnull()), numpy.nan, df['C'])
然后我得到适当的新专栏:
A B C
0 63.0 9.0 Yes
1 NaN 35.0 NaN
2 51.0 95.0 Yes
3 25.0 11.0 No
4 91.0 NaN NaN
5 2.0 47.0 No
6 37.0 10.0 No
7 NaN 88.0 NaN
8 75.0 87.0 Yes
9 92.0 21.0 Yes
有没有更好的方法可以让我仅在单行代码中更正缺失值?
最佳答案
使用 np.select
。条件的顺序在这里很重要,因为 np.select
选择第一个有效选项,所以您必须先进行 null 检查。
c1 = df.isnull().any(1)
c2 = df.gt(55).any(1)
df['C'] = np.select([c1, c2], [np.nan, 'Yes'], 'No')
A B C
0 63.0 9.0 Yes
1 NaN 35.0 nan
2 51.0 95.0 Yes
3 25.0 11.0 No
4 91.0 NaN nan
5 2.0 47.0 No
6 37.0 10.0 No
7 NaN 88.0 nan
8 75.0 87.0 Yes
9 92.0 21.0 Yes
关于python - 基于忽略缺失值的多个条件的新列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51699376/