python - 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 吗?
提前感谢您的帮助,我很感激!
解决方案
根据文档,语法为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.)
推荐阅读
- linq - EF Core 2.2 在加入多列时意外生成 SQL
- c++ - 为什么&符号运算符仅有时用于在 C++ 中分配指针?
- azure - 天蓝色中没有 NAT 的 NVA 用于 INTERNET 访问
- hadoop - ParseException line 6:5 无法识别 joinSource 中 '(' 'SELECT' 'system' 附近的输入
- c++ - 将 std::unique_ptr 推回 std::vector 时编译器不会失败
- sql - 在另一个查询中使用 WITH 结果
- java - 如何将上下文传递给静态方法?
- python-3.x - 如何重构此 Python 代码以使其更具可读性和紧凑性?
- python - 测试是否在 python 3 numpy 中正确执行了操作?
- r - R-markdown:在回显代码和结果输出之间添加一个空行