首页 > 解决方案 > 根据 Python 中两行之间的匹配创建一个具有 [0,1] 的新列

问题描述

我正在尝试将多个列表或数据框与一个大型基础数据框进行比较。然后对于任何匹配,我想附加一个存储 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)

查找所有匹配值。

提前致谢!

标签: pythonpandasfunctiondataframerow

解决方案


您已经循环了.apply,因此您可以省略循环,并且 for testin用于列表的成员资格:

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))

推荐阅读