【发布时间】:2015-02-03 11:46:48
【问题描述】:
我正在尝试合并两个包含相同键列的数据框。其他一些列也具有相同的标题,尽管行数不相等,并且在合并后这些列与原始标题“重复”,给出后记 _x、_y 等。
有谁知道如何让 pandas 删除下面示例中的重复列?
这是我的python代码:
import pandas as pd
holding_df = pd.read_csv('holding.csv')
invest_df = pd.read_csv('invest.csv')
merge_df = pd.merge(holding_df, invest_df, on='key', how='left').fillna(0)
merge_df.to_csv('merged.csv', index=False)
CSV 文件包含以下内容:
left-dataframe 的第一行 (holding_df)
key, dept_name, res_name, year, need, holding
DeptA_ResA_2015, DeptA, ResA, 2015, 1, 1
DeptA_ResA_2016, DeptA, ResA, 2016, 1, 1
DeptA_ResA_2017, DeptA, ResA, 2017, 1, 1
...
右数据框 (invest_df)
key, dept_name, res_name, year, no_of_inv, inv_cost_wo_ice
DeptA_ResA_2015, DeptA, ResA, 2015, 1, 1000000
DeptA_ResB_2015, DeptA, ResB, 2015, 2, 6000000
DeptB_ResB_2015, DeptB, ResB, 2015, 1, 6000000
...
合并结果
key, dept_name_x, res_name_x, year_x, need, holding, dept_name_y, res_name_y, year_y, no_of_inv, inv_cost_wo_ice
DeptA_ResA_2015, DeptA, ResA, 2015, 1, 1, DeptA, ResA, 2015.0, 1.0, 1000000.0
DeptA_ResA_2016, DeptA, ResA, 2016, 1, 1, 0, 0, 0.0, 0.0, 0.0
DeptA_ResA_2017, DeptA, ResA, 2017, 1, 1, 0, 0, 0.0, 0.0, 0.0
DeptA_ResA_2018, DeptA, ResA, 2018, 1, 1, 0, 0, 0.0, 0.0, 0.0
DeptA_ResA_2019, DeptA, ResA, 2019, 1, 1, 0, 0, 0.0, 0.0, 0.0
...
【问题讨论】:
-
添加更多的列合并仍然会给你想要的结果吗?
merge_df = pd.merge(holding_df, invest_df, on=['key', 'dept_name', 'res_name', 'year'], how='left').fillna(0) -
_x和_y列源自合并中的左右帧。您需要指定更多列以表明它们是相同的(熊猫不知道)。 -
表示值不一致或从 lhs 或 rhs 中丢失,因此您需要重命名
_x列并删除所有_y列,您需要使用 @ 987654334@ 和rename建议我可以发布一个动态方法来做到这一点