Pandas: 将数据帧的单元格与不同列的内容进行比较并复制相邻数据

Pandas: Comparing cell of a dataframe to content of different column & copying neighboring data

我想遍历数据框 A 的列,对于每个单元格,检查其内容是否与数据框 B 中列的任何单元格匹配。如果匹配,我想复制同一列的另一列的内容数据框 B 中的行到数据框 A 中匹配单元格行中的新列。

示例:

dataframe_a

姓名 |年龄
布拉德 | 36
梅艳芳 | 54
布拉德 | 23
玛丽 | 34

dataframe_b

first_name |性别
艾米 | f
梅艳芳 | f
本 |米
贝拉 | f
本 |米
布拉德 |米
弗洛里安 |米
玛丽 | f
...

目标:dataframe_a

姓名 |年龄 |性别
布拉德 | 36 |米
梅艳芳 | 54 | f
玛丽 | 34 | f

到目前为止,这就是我所拥有的

if (dataframe_a['name'].iteritems() == dataframe_b['first_name]:
    dataframe_b['gender'] = dataframe_a['gender']

但是,我得到 "ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or 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)

gender_map:

{'Amy': 'f',
 'Anita': 'f',
 'Ben': 'm',
 'Bella': 'f',
 'Brad': 'm',
 'Florian': 'm',
 'Mary': 'f'}
    name  age gender
0   Brad   36      m
1  Anita   54      f
2   Mary   34      f