根据另一个数据框的值向数据框添加新列

时间:2018-07-21 09:07:36

标签: 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中编写了以下代码

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

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

1 个答案:

答案 0 :(得分:0)

它不起作用,因为在创建原始数据帧时您正在使用元组。这将导致一列包含元组,而不是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)