我想根据我的200多列数据库中14列中的值设置一个新列的值
如果全部为空,则设置为“无效”, 如果任何值为“是”,则设置为“真”,否则设置为“假”
下面是3列子集的示例:
A B C
1
2 Yes Yes
3 No Yes Yes
4 No Yes Yes
5 No No N/A
期望输出:
A B C D
1 Invalid
2 Yes Yes True
3 No Yes Yes True
4 Yes True
5 No No N/A False
为此,我修改了以下Setting value of a column based on values of other columns in Pandas dataframe:
m1 = dfMSR['A'] == 'Yes'
m2 = dfMSR['B'] == 'Yes'
m3 = dfMSR['C'] == 'Yes'
dfMSR['D'] = np.select([m1 | m2 | m3], [True], default = False)
dfMSR['D'] = np.where(((dfMSR['A'].isnull()) &
(dfMSR['B'].isnull()) &
(dfMSR['C'].isnull())),
'Invalid', dfMSR['D'])
这是可行的,但我不喜欢编写扩展到14列的代码。有更好的方法吗
谢谢
我认为,apply()方法可以帮助您(尽管在这种特定情况下有更直接的方法,但我认为这个通用方法可能会有所帮助。)
首先,以一个小数据帧为例:
因此,您将有:
然后,您可以定义一个函数来按行应用于列集合。例如,如果列表中没有一个,则返回None,或者执行和。你可以很容易地适应你的情况
所以这将返回False:
现在,如果将此函数应用于df:
你会有
使用^{} 测试^{} 中至少一个值} 是否错误显示了所有值:
Yes
,然后测试^{首先尝试检查nan,然后检查
YES
。然后使用np.select
:输出:
相关问题 更多 >
编程相关推荐