Python Pandas:将数据帧的单元格与不同列的内容进行比较&;复制相邻数据
我想迭代dataframe A的列,对于每个单元格,检查其内容是否与dataframe B中某列的任何单元格匹配。如果匹配,我想将dataframe B中同一行的另一列的内容复制到dataframe A中匹配单元格的行中的新列 例如: 数据帧a 姓名|年龄Python Pandas:将数据帧的单元格与不同列的内容进行比较&;复制相邻数据,python,pandas,dataframe,series,Python,Pandas,Dataframe,Series,我想迭代dataframe A的列,对于每个单元格,检查其内容是否与dataframe B中某列的任何单元格匹配。如果匹配,我想将dataframe B中同一行的另一列的内容复制到dataframe A中匹配单元格的行中的新列 例如: 数据帧a 姓名|年龄 布拉德| 36 安妮塔| 54 布拉德| 23 玛丽34岁 数据帧b 名字|性别 艾米| f 安妮塔| f Ben|m 贝拉| f Ben|m 布拉德| m 弗洛里安| m 玛丽| f 目标:数据帧a 姓名|年龄|性别 布拉德| 36 |
布拉德| 36
安妮塔| 54
布拉德| 23
玛丽34岁 数据帧b 名字|性别
艾米| f
安妮塔| f
Ben|m
贝拉| f
Ben|m
布拉德| m
弗洛里安| m
玛丽| f
目标:数据帧a 姓名|年龄|性别
布拉德| 36 | m
安妮塔| 54 | f
玛丽| 34 | f 到目前为止,这就是我所拥有的
if (dataframe_a['name'].iteritems() == dataframe_b['first_name]:
dataframe_b['gender'] = dataframe_a['gender']
然而,我得到了“ValueError:序列的真值是不明确的。使用a.empty、a.bool()、a.item()、a.any()或a.all()。我猜我必须在这里设置一个循环,但这太慢了,我很确定一定有更快的方法 试试这个:
df1.merge(df2.rename(columns={'first_name':'name'}))
输出:
name age gender
0 Brad 36 m
1 Anita 54 f
2 Mary 34 f
您也可以使用字典执行此操作:
gender_map = dataframe_b.set_index('first_name').to_dict()['gender']
dataframe_a['gender'] = dataframe_a.set_index('name').index.map(gender_map)
性别分布图:
{'Amy': 'f',
'Anita': 'f',
'Ben': 'm',
'Bella': 'f',
'Brad': 'm',
'Florian': 'm',
'Mary': 'f'}
谢谢你的帮助!但这不起作用,因为df2是一个非常大的数据帧,有各种各样的名称,而df2有一个很小的名称列表,它们可能会出现几次,所以“名称”不是唯一的。@laryl我用另一种方法进行了更新,这可能会有所帮助。为什么您认为必须使用循环?你试过在网上查找那个错误消息吗?
name age gender
0 Brad 36 m
1 Anita 54 f
2 Mary 34 f