合并相似列上的两个数据帧

2024-04-19 11:30:41 发布

您现在位置:Python中文网/ 问答频道 /正文

我有以下两个数据帧,它们是一个大型数据集的片段:

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中的键不匹配的信息。因此,我的结果dataframe应该比df1多出一列和确切的行数。你知道吗

有人知道为什么合并“left”在这里不起作用吗?因为如果我这样运行代码,我的结果dataframe会比df1多出一列(如所需),但行也比df1多,这是我不想要的。你知道吗


Tags: 数据key命令numberdataframedateonresult
2条回答

谢谢你的回复。我实际上是通过:

result= df1.join(df2, how="left", on="key", lsuffix='_', rsuffix='_')

我不知道为什么这不能产生与合并相同的结果。。。你知道吗

您可以使用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_onright_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)也可以工作(例如您的示例)。你知道吗

相关问题 更多 >