我正在尝试将多个列表或数据帧与一个大的基本数据帧进行比较。然后,对于任何匹配,我想追加一个存储1=匹配或0=无匹配的列
df = pd.DataFrame({'Name':['A','B','C','D'], 'ID' : ['5-6','6-7','8-9','7']})
list1 = ['5-6','8-9']
list2 = ['7','4-3']
因为我尝试匹配的值包括一个'-‘,所以它们被算作字符串。我已经可以生成一个匹配值的列表,但是如果我追加它们,它们都是0
def f(rows):
for i in df['ID']:
for j in list1:
if i == j:
val = 1
else:
val = 0
return val
df['Answer']= df.apply(f,axis=1)
而
for i in df['ID']:
for j in list1:
if i == j:
print (i)
查找所有匹配值。
提前感谢!
发布于 2021-02-12 22:25:03
您已经通过.apply
进行了循环,因此可以省略循环,并使用in
作为list的成员:
def f(rows):
if rows['ID'] in list1:
val = 1
else:
val = 0
return val
df['Answer']= df.apply(f,axis=1)
print (df)
Name ID Answer
0 A 5-6 1
1 B 6-7 0
2 C 8-9 1
3 D 7 0
更简单是使用带有指定列的lambda函数:
df['Answer']= df['ID'].apply(lambda x: 1 if x in list1 else 0)
或者:
df['Answer']= df['ID'].apply(lambda x: int(x in list1))
发布于 2021-02-12 22:43:15
在这里,您可以使用DataFrame.isin代替循环,
df['Answer'] = df['ID'].isin(list1).astype(int)
Name ID Answer
0 A 5-6 1
1 B 6-7 0
2 C 8-9 1
3 D 7 0
https://stackoverflow.com/questions/66173302
复制相似问题