python - 根据 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)
查找所有匹配值。
提前致谢!
解决方案
您已经循环了.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))
推荐阅读
- typescript - 如何在打字稿中创建包含多个键值对的对象数组
- c# - how to use DontDestroyOnLoad?
- java - (PHP、javascript 和 html)很好地读出 txt 文件
- vb.net - How to Assign A Structure Type In Declaration Moment?
- go - 动态添加 Kafka 主题以供使用,而无需重新启动我的 GoLang 应用程序
- robotframework - 我收到以下错误:TypeError: 'bool' object is not subscriptable
- java - 创建一个“新建”按钮来打开一个新的 JFrame
- json - Angular Typescript Json Cast
- php - Laravel 数据库请求
- windows - 如何过滤掉powershell中的信息?