【发布时间】:2021-06-07 17:39:09
【问题描述】:
我想通过获取其中两列中的值并将它们与在不同数据框中以相同顺序出现的值进行比较,从而向 Pandas DataFrame 添加一个新列。
例子:
first_names = pd.Series(['john','jack','jean','jose'])
last_names = pd.Series(['bob','steve','carl','anthony'])
names1 = pd.DataFrame({'firstname': first_names, 'lastname':last_names})
names2 = pd.DataFrame({'firstname': first_names,"lastname":['bob','steve','carl','joshua']})
firstname lastname
0 john bob
1 jack steve
2 jean carl
3 jose anthony
firstname lastname
0 john bob
1 jack steve
2 jean carl
3 jose joshua
如果名字和姓氏组合在 names1 中,我想将“real”列添加到 names2 并用 True 填充,否则用 False 填充。
这是我的尝试:
def verify(first,last):
if names1.loc[ (names1['firstname'].str.contains(first)) & (names1['lastname'].str.contains(last)) , ['firstname','lastname'] ].empty:
return False
else:
return True
names2['real'] = verify(names2['firstname'], names2['lastname']))
我得到了令人沮丧的错误:
TypeError: 'Series' objects are mutable, thus they cannot be hashed
它似乎被抛出在函数 verify 内的以下行:
names1.loc[ (names1['firstname'].str.contains(first)) & (names1['lastname'].str.contains(last)) , ['firstname','lastname'] ].empty:
虽然在直接值时调用函数时它可以正常工作:
verify('jose','anthony')
返回True
这让我觉得这些值不是作为字符串传递的
如何正确地将值传递给上述函数? 是否有更直接的方法来完成比较?
编辑:我忘了提到我的数据框的大小不匹配。 datafaname names2 的行数比 names1 多。使用 names1 保存查找数据并充当检查真假名字和姓氏组合的参考。
【问题讨论】: