Pandas:如果列表中的值存在于行

时间:2018-01-29 21:50:07

标签: python pandas conditional

最终,我想标记一个新列,' ExclusionFlag',其中0或1取决于列表中的值是否存在于行中的任何位置。

df = pd.DataFrame([['cat','b','c','c'],['a','b','c','c'],['a','b','c','dog'],['dog','b','c','c']],columns=['Code1','Code2','Code3','Code4'])
excluded_codes = ['cat','dog']

#Attempt
df['ExclusionFlag'] = df.apply(lambda x: 'cat' in x.values, axis=1).any()

#Desired outcome
#Side note: I have 120 rows to check. They're labeled Code1, Code2...Code120. 

    Code1   Code2   Code3   Code4   ExclusionFlag
0   cat     b       c       c       1
1   a       b       c       c       0
2   a       b       c       dog     1
3   dog     b       c       c       1

我将代码行标记为True。

当我在' cat'中添加excluded_codes列表时在我的lambda表达式中,我收到一个错误。

我发现了一些像这样的问题,但我看到的通常是(见下文),它引出了一个特定的列,但我不认为迭代120列是最好的方法。虽然我错了。

df['ExclusionFlag'] = df['Code1'].isin(exclusion_codes)

2 个答案:

答案 0 :(得分:9)

这样的东西
df['ExclusionFlag'] = df.isin(excluded_codes).any(1).astype(int)

    Code1   Code2   Code3   Code4   ExclusionFlag
0   cat     b       c       c       1
1   a       b       c       c       0
2   a       b       c       dog     1
3   dog     b       c       c       1

答案 1 :(得分:0)

如果你想在新列中使用 True 或 False 值,你可以在没有 Any 和 Astype 的情况下检查它们。

df['ExclusionFlag'] = df.isin(excluded_codes)

您还可以检查特定列:

df['ExclusionFlag'] = df['Code2'].isin(excluded_codes)