Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Pandas:将数据帧的单元格与不同列的内容进行比较&;复制相邻数据_Python_Pandas_Dataframe_Series - Fatal编程技术网

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

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 |

我想迭代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 | 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