【发布时间】:2016-11-24 21:30:01
【问题描述】:
我有一个 pandas 数据框,我需要根据 if-else 条件创建一个新列。这个问题已经多次出现在这里(例如,Creating a new column based on if-elif-else condition)。
但是,我无法应用建议的解决方案,因为我还需要在列表中查找值以检查条件。我无法使用建议的解决方案来做到这一点,因为我不确定如何在外部函数中访问我的查找列表。我的查找列表需要是全局的,我想避免这种情况。我觉得应该有更好的方法来做到这一点。
考虑以下数据框df:
letters
A
B
C
D
E
F
我还有一个包含查找值的列表:
lookup = [C,D]
现在,我想在我的数据框中创建一个包含 1 的新列,如果相应的值包含在 lookup 和 0 中,如果值不在 lookup 中。
典型的方法是:
df.apply(helper, axis=1)
def helper(row):
if(row['letters'].isin(lookup)):
row['result'] = 1
else:
row['result'] = 0
但是,我不知道如何才能访问 lookup 中的 helper() 而不使其成为全局。
结果应该是这样的:
letters result
A 0
B 0
C 1
D 1
E 0
F 0
【问题讨论】:
-
这个和这个很相似:stackoverflow.com/questions/38499890/…你只需要做
df.loc[df['letters'].isin(lookup),'result'] = 1 -
或者更完整的是
df['result'] = np.where(df['letters'].isin(lookup), 1, 0)
标签: python pandas conditional conditional-statements