我有2个数据帧,我试图获取一个数据帧的“名称”列中的第一个值,然后在另一个数据帧的“名称”列中使用该值进行isin。我正在尝试这样做,因为,如果isin为true,那么我想获取相应的AGE并匹配两者,然后,如果也为true,则获取相应的City&match。
但是我收到如下错误。 “ TypeError:只允许将类似列表的对象传递给isin(),而您传递了[str]” 如果我只打印“ row ['name']”,我得到名字的值,但是为什么不进行isin检查呢?我在这里想念什么?
Df1 = pd.DataFrame({'name': ['Marc', 'Jake', 'Sam', 'Brad'],
'Age': ['24', '25', '26', '27'],
'City': ['Agra', 'Bangalore', 'Calcutta', 'Delhi']})
Df2 = pd.DataFrame({'name': ['Jake', 'John', 'Marc', 'Tony', 'Bob', 'Marc'],
'Age': ['25', '25', '24', '28','29', '39'],
'City': ['Bangalore', 'Chennai', 'Agra', 'Delhi','Pune','zoo']})
for index, row in Df1.iterrows():
if Df2.name.isin(row['name'])==True:
print('present')
答案 0 :(得分:1)
问题是isin
需要列表,因此可能的解决方案是使用Series.any
创建一个元素列表,以测试至少一个值是否匹配-至少一个True
:
for index, row in Df1.iterrows():
if Df2.name.isin([row['name']]).any():
print ('present')
或通过Series.eq
进行比较:
for index, row in Df1.iterrows():
if Df2.name.eq(row['name']).any():
print ('present')