首页 > 解决方案 > Pandas 基于多个约束匹配数据框列

问题描述

我正在处理一个包含财务数据的项目。在这种情况下,我有两个数据框,一个包含基本价值,另一个包含价格。因为我必须使用两个不同的数据库,所以 dfs 的大小不同,主要是由于公司('tic')和/或日期('year')不匹配。

这是fund_df的一个例子:

        tic       assets      year
0      AAPL       123.99      1999
1      AAPL       143.20      2000
..     ...          ...       ...
200    GMCF         9.56      2013
201    GMCF        11.21      2014
..     ...          ...       ...
1543   TSLA       201.23     2015
1544   TSLA       233.49     2016

而 price_df 看起来像这样:

        tic       prices      year
0      MPRD       56.789      2000
1      MPRD       48.222      2001
..     ...          ...       ...
200    GM         87.991      2012
201    GM        102.334      2013
..     ...          ...       ...
1543   ZZ         34.567      2017
1544   ZZ         29.887      2018

我的目标是统一这两个 dfs,以便我可以同时处理基本值和价格值。但是,因为我担心数据集在 tic 和 year 的角度下都不同,我希望根据需要在两个级别上的匹配来统一这些值,以便 2015 年 TSLA 的基本值匹配2015 年 TSLA 的价格。

我尝试了以下代码:

merged_df = merge(fund_df, prices_df, by.fund_df=['tic', 'year'], by.prices_df['tic', 'year'], all = TRUE)

但是我不断收到此错误消息:

SyntaxError: keyword can't be an expression

任何人都可以帮我找到一个解决方案来合并两个基于 tic 和 year 约束的 dfs 吗?

提前感谢您的帮助,我很感激!

标签: pythonpython-3.xpandaspython-2.7finance

解决方案


根据文档,语法为pandas.merge

merged_df = merge(
    fund_df,                     # left dataframe
    prices_df,                   # right dataframe
    left_on=['tic', 'year'],     # columns to join on in left dataframe
    right_on=['TICKER', 'year'], # columns to join on in right dataframe
    how='outer')                 # type of join (e.g. inner, outer, left, etc.)

推荐阅读