I have the following Pandas dataframe:
Index Name ID1 ID2 ID3
1 A Y Y Y
2 B Y Y
3 B Y
4 C Y
我希望添加一个名为'Multiple'的新列,用于指示ID1、ID2和ID3列中有超过一个值为Y的行。
Index Name ID1 ID2 ID3 Multiple
1 A Y Y Y Y
2 B Y Y Y
3 B Y N
4 C Y N
通常我会使用np.where
或np.select
,例如:
df['multiple'] = np.where(<More than 1 of ID1, ID2 or ID3 have a Y in>), 'Y', 'N')
但是我无法想出如何编写条件语句。可能会有越来越多的ID列,所以我不能将每个组合作为单独的条件进行覆盖 (例如:(ID1 = Y and ID3 = Y) or (ID2 = Y and ID3 = Y)
)。我认为我可能需要计算指定列中的Y值总数?
在Pandas之外,我会考虑使用列表,在其中附加每个列的值(如果为Y),然后查看列表是否具有大于1的长度。
但我不知道如何在np.where
、np.select
或df.loc
的限制下完成它。有什么建议吗?
np.where(df.filter(like='ID').eq('Y').sum(1).gt(1), 'Y', 'N')
- user3483203df.apply(lambda x: x.eq('Y')).sum(1).gt(1)
- Quang Hoang