根据 if-else 条件和查找创建新的 pandas 数据框列
create new pandas dataframe column based on if-else condition with a lookup
我有一个 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
17=].
典型的方法是:
df.apply(helper, axis=1)
def helper(row):
if(row['letters'].isin(lookup)):
row['result'] = 1
else:
row['result'] = 0
但是,我不知道如何在 helper()
中访问 lookup
而无需将其设为全局。
结果应如下所示:
letters result
A 0
B 0
C 1
D 1
E 0
F 0
尽管这个问题与问题非常相似:
我认为这里值得展示几个方法,在一行中使用 np.where
和从 isin
生成的布尔掩码,isin
将 return 一个布尔值任何行包含列表中任何匹配项的系列:
In [71]:
lookup = ['C','D']
df['result'] = np.where(df['letters'].isin(lookup), 1, 0)
df
Out[71]:
letters result
0 A 0
1 B 0
2 C 1
3 D 1
4 E 0
5 F 0
此处使用 2 loc
语句并使用 ~
反转掩码:
In [72]:
df.loc[df['letters'].isin(lookup),'result'] = 1
df.loc[~df['letters'].isin(lookup),'result'] = 0
df
Out[72]:
letters result
0 A 0
1 B 0
2 C 1
3 D 1
4 E 0
5 F 0
我有一个 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
17=].
典型的方法是:
df.apply(helper, axis=1)
def helper(row):
if(row['letters'].isin(lookup)):
row['result'] = 1
else:
row['result'] = 0
但是,我不知道如何在 helper()
中访问 lookup
而无需将其设为全局。
结果应如下所示:
letters result
A 0
B 0
C 1
D 1
E 0
F 0
尽管这个问题与问题非常相似:
我认为这里值得展示几个方法,在一行中使用 np.where
和从 isin
生成的布尔掩码,isin
将 return 一个布尔值任何行包含列表中任何匹配项的系列:
In [71]:
lookup = ['C','D']
df['result'] = np.where(df['letters'].isin(lookup), 1, 0)
df
Out[71]:
letters result
0 A 0
1 B 0
2 C 1
3 D 1
4 E 0
5 F 0
此处使用 2 loc
语句并使用 ~
反转掩码:
In [72]:
df.loc[df['letters'].isin(lookup),'result'] = 1
df.loc[~df['letters'].isin(lookup),'result'] = 0
df
Out[72]:
letters result
0 A 0
1 B 0
2 C 1
3 D 1
4 E 0
5 F 0