gpt4 book ai didi

python - Pandas :如果其他列的任何子组中的值 = yes,则将列的值设置为 true

转载 作者:行者123 更新时间:2023-12-04 08:17:55 26 4
gpt4 key购买 nike

我想根据我的 200 多列等于的数据库中的一组 14 列中的值设置新列的值。
如果全部为空,则设置为“无效”,
如果任何值 = 'Yes',则设置为 'True',否则设置为 'False'
下面是 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 列。有一个更好的方法吗?
谢谢。

最佳答案

使用 numpy.select 测试至少一个值 Yes DataFrame.any 然后测试是否所有值都被 DataFrame.all 遗漏了:

#columns for test, in real data 14 columns names
cols = ['A','B','C']
m1 = dfMSR[cols].eq('Yes').any(axis=1)
m2 = dfMSR[cols].isna().all(axis=1)

dfMSR['D'] = np.select([m1, m2], [True, 'Invalid'], default=False)
print (dfMSR)
A B C D
1 NaN NaN NaN Invalid
2 Yes Yes NaN True
3 No Yes Yes True
4 No Yes Yes True
5 No No NaN False

关于python - Pandas :如果其他列的任何子组中的值 = yes,则将列的值设置为 true,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65630715/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com