![](/img/trans.png)
[英]Check if value from one dataframe exists in another dataframe and create column
[英]Check if value from one dataframe exists in another dataframe
我有 2 个数据框。
Df1 = pd.DataFrame({'name': ['Marc', 'Jake', 'Sam', 'Brad']
Df2 = pd.DataFrame({'IDs': ['Jake', 'John', 'Marc', 'Tony', 'Bob']
我想遍历Df1['name']
每一行并检查每个名称是否在Df2['IDs']
某处。
如果名称在那里,结果应该返回 1,如果不是这样,则返回 0:
Marc 1
Jake 1
Sam 0
Brad 0
谢谢你。
使用isin
Df1.name.isin(Df2.IDs).astype(int)
0 1
1 1
2 0
3 0
Name: name, dtype: int32
在数据框中显示结果
Df1.assign(InDf2=Df1.name.isin(Df2.IDs).astype(int))
name InDf2
0 Marc 1
1 Jake 1
2 Sam 0
3 Brad 0
在 Series 对象中
pd.Series(Df1.name.isin(Df2.IDs).values.astype(int), Df1.name.values)
Marc 1
Jake 1
Sam 0
Brad 0
dtype: int32
这应该这样做:
Df1 = Df1.assign(result=Df1['name'].isin(Df2['IDs']).astype(int))
通过使用merge
s=Df1.merge(Df2,left_on='name',right_on='IDs',how='left')
s.IDs=s.IDs.notnull().astype(int)
s
Out[68]:
name IDs
0 Marc 1
1 Jake 1
2 Sam 0
3 Brad 0
这是一种方式。 转换为 O(1) 查找设置并使用astype(int)
将布尔值表示为整数。
values = set(Df2['IDs'])
Df1['Match'] = Df1['name'].isin(values).astype(int)
嗨 qq 当 DF1 的名称列中有重复值时会发生什么。 例如:如果 Marc 在 DF2 中被列出两次,结果表中的列 InDF2 会将其标记为 2 还是仅标记 1? 我有一个类似的问题,它只是将其标记为 1。
谢谢
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.