【问题标题】:join a column by comparing two other columns in different dataframes通过比较不同数据框中的其他两列来连接一列
【发布时间】:2019-10-11 23:28:52
【问题描述】:

我有两个不同大小的数据框:

df1:

    id  datetime
0   a1  1/1/2015

1   a1  2/1/2015

2   a1  3/1/2015

3   a2  1/1/2015

4   a2  2/1/2015

5   a3  2/1/2015

6   a3  3/1/2015

df2:

    id  datetime    total cost

0   a1  1/1/2015    3

1   a1  2/1/2015    4

2   a1  3/1/2015    2.5

3   a2  1/1/2015    5

4   a2  2/1/2015    4

5   a2  3/1/2015    3

6   a3  1/1/2015    7

7   a3  2/1/2015    8

8   a3  3/1/2015    4

我想将 df1 与 df2 进行比较,以便我可以用相应 id 和 datetime 的总成本值更新我的 df1。所以我希望我的结果看起来像: df1:

    id  datetime    totalcost

0   a1  1/1/2015    3

1   a1  2/1/2015    4

2   a1  3/1/2015    2.5

3   a2  1/1/2015    5

4   a2  2/1/2015    4

5   a3  2/1/2015    8

6   a3  3/1/2015    4

我尝试使用 isin,但无法同时比较 id 和日期时间列。除了 for 循环和逐行比较之外,还有什么优雅的方法可以做到这一点?提前致谢

【问题讨论】:

    标签: python pandas dataframe


    【解决方案1】:

    您可以在 2 个键上执行简单的merge

    res = pd.merge(df1, df2, on=['id', 'datetime'])
    
    print(res)
    
       id  datetime  total
    0  a1  1/1/2015    3.0
    1  a1  2/1/2015    4.0
    2  a1  3/1/2015    2.5
    3  a2  1/1/2015    5.0
    4  a2  2/1/2015    4.0
    5  a3  2/1/2015    8.0
    6  a3  3/1/2015    4.0
    

    【讨论】:

    • 感谢您的解决方案。我已经发布了这些 df 作为示例,但我的真实数据集有更多列,我只需要合并其中的一个。我们可以指定需要合并的那个吗?
    • 一个技巧是通过获取数据框的子集仅在列上合并。例如,您想要的列是xy。你这样做:pd.merge(df1, df2[['id', 'datetime', 'x', 'y']], on=['id', 'datetime']) 编辑:忘记添加密钥
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-04-06
    • 1970-01-01
    • 1970-01-01
    • 2022-01-16
    • 2019-12-13
    • 2019-12-20
    • 2014-02-03
    相关资源
    最近更新 更多