我有以下两个数据框,它们是大型数据集中的片段:
df1:
date key number
2000 1 50
2001 1 40
2000 2 600
2001 2 650
df2:
key key2
1 A
2 B
3 C
我想将key2列添加到“key”上匹配的df1列。结果应如下所示:
date key number key2
2000 1 50 A
2001 1 40 A
2000 2 600 B
2001 2 650 B
为此,我使用以下命令:
result = pd.merge(df1, df2, how="left", on="key")
但是,这也将key2“C”添加到数据集中,我不想添加它。我只想根据df1的键将变量key2附加到df1。应删除df2中与df1中的键不匹配的信息。因此,我的结果数据框应该有一列多于df1和精确的行数。
有没有人知道为什么合并“left”在这里不起作用,因为如果我运行这样的代码,我的结果数据框有更多的列 - 根据需要 - 但也比df1更多的行,这是我不想要的。
答案 0 :(得分:2)
您可以使用pd.Series.replace
:
In [242]: df1['key2'] = df1.key.replace(dict(df2.values)); df1
Out[242]:
date key number key2
0 2000 1 50 A
1 2001 1 40 A
2 2000 2 600 B
3 2001 2 650 B
您还可以使用df.merge
指定left_on
和right_on
列进行合并:
In [251]: df1.merge(df2, left_on='key', right_on='key')
Out[251]:
date key number key2
0 2000 1 50 A
1 2001 1 40 A
2 2000 2 600 B
3 2001 2 650 B
事实上,您可以省略关键字参数,pd.merge(df1, df2)
也可以(对于您的示例)。
答案 1 :(得分:0)
感谢您的回复。我实际上是通过以下方式完成的:
result= df1.join(df2, how="left", on="key", lsuffix='_', rsuffix='_')
我不知道为什么这不会产生与合并相同的结果......