【问题标题】:Merging two dataframes on similar columns合并相似列上的两个数据框
【发布时间】:2017-08-23 09:18:11
【问题描述】:

我有以下两个数据框,它们是从一个大数据集中提取出来的sn-ps:

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 多一列和确切的行数。

有谁知道为什么合并“左”在这里不起作用,因为如果我像这样运行代码,我的结果数据框有 1 列 - 根据需要 - 但也比 df1 多行,这是我不想要的。

【问题讨论】:

  • 如果我运行你的代码,结果没有 key2 'C' 的列。

标签: python pandas dataframe


【解决方案1】:

你可以使用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) 也可以(以您的示例为例)。

【讨论】:

    【解决方案2】:

    感谢您的回复。我实际上是通过以下方式完成的:

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

    我不知道为什么这不会产生与合并相同的结果...

    【讨论】:

    • 您没有提供令人满意地封装您的问题的 MVCE。
    猜你喜欢
    • 1970-01-01
    • 2017-06-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多