Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/323.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 基于另一个数据帧的值向数据帧添加新列_Python_Python 3.x_Pandas_Dataframe_Merge - Fatal编程技术网

Python 基于另一个数据帧的值向数据帧添加新列

Python 基于另一个数据帧的值向数据帧添加新列,python,python-3.x,pandas,dataframe,merge,Python,Python 3.x,Pandas,Dataframe,Merge,我有两个python数据帧df1和df2。 df2有A、B、C列。 df1有A、B、D列,其中A和B中的一对值可能重复 我想添加一个新的列C,以便它从df2中获取值。 例如: df2具有以下条目:[(1,2,0)、(2,1,3)、(3,4,10)] 和 df1有条目[(1,2,2)、(1,2,5)、(3,4,5)、(1,2,7)、(3,4,3)] 我想要的最终结果是[(1,2,2,0),(1,2,5,0),(3,4,5,10),(1,2,7,0),(3,4,3,10)]。 我用python编写了

我有两个python数据帧df1和df2。
df2
有A、B、C列。
df1
有A、B、D列,其中A和B中的一对值可能重复

我想添加一个新的列C,以便它从df2中获取值。 例如:
df2
具有以下条目:[(1,2,0)、(2,1,3)、(3,4,10)] 和
df1
有条目[(1,2,2)、(1,2,5)、(3,4,5)、(1,2,7)、(3,4,3)] 我想要的最终结果是[(1,2,2,0),(1,2,5,0),(3,4,5,10),(1,2,7,0),(3,4,3,10)]。 我用python编写了以下代码

result = pd.merge(df1,df2,on=['A','B'])
result.head()

但是结果是一个空的数据帧。

它不起作用,因为您在创建原始数据帧时使用了元组。这将导致一列保存元组,而不是A、B、C和D列。下面是有效的代码:

import pandas as pd

data1 = [[1,2,2], [1,2,5], [3,4,5], [1,2,7], [3,4,3]]
data2 = [[1,2,0], [2,1,3], [3,4,10]] 

df1 = pd.DataFrame(data1, columns=['A', 'B', 'D'])
df2 = pd.DataFrame(data2, columns=['A', 'B', 'C'])

df = pd.merge(df1, df2, on=['A', 'B'])
#df['tuple'] = df.apply(lambda row: (row['A'], row['B'], row['C'], row['D']), axis=1)
df['tuple'] = list(zip(df.A, df.B, df.C, df.D))

df
输出为:

    A   B   D   C   tuple
0   1   2   2   0   (1, 2, 0, 2)
1   1   2   5   0   (1, 2, 0, 5)
2   1   2   7   0   (1, 2, 0, 7)
3   3   4   5   10  (3, 4, 10, 5)
4   3   4   3   10  (3, 4, 10, 3)

所以你想要一个包含所有唯一值的元组的新列???请显示你想要的输出并提供一个。