我试图根据三列TRADE_ID
、TRADE_SUB_ID
和helper
使用df2
离开merge
{merge
函数之前,df1
有44列。在merge
之后,df1
现在有122列
df1 = df1.merge(df2, how='left', on=['ID', 'SUB_ID', 'helper'], indicator='Result')
df1['Result'] = df1['Result'].map({
'both': np.nan,
'left_only': 'under-reporting',
'right_only': np.nan
})
我想问一下,我是否可以在不创建重复列的情况下进行合并。非常感谢你
编辑:
df1
看起来像这样:
ID SUB_ID ... TIMESTAMP helper
250 G0000001 F1 ... 48:04.6 0
251 G0000002 F1 ... 51:25.1 0
252 G0000003 F1 ... 54:10.6 0
253 G0000006 F1 ... 03:17.1 0
254 G0000008 F1 ... 09:23.2 0
... ... ... ... ...
8610 G0000004 N1 ... 39:58.2 0
8611 G0000005 F1 ... 39:58.2 0
8612 G0000005 N1 ... 39:58.2 0
8641 G0000010 F1 ... 41:54.1 0
8642 G0000020 N1 ... 41:54.1 0
[248 rows x 44 columns]
而且df2
看起来是这样的:
Type Primary Key ... SUB_ID helper
0 Trade G000002.00NTSN ... 00 0
1 Trade G0000003.F10NTSN ... F1 0
2 Trade G0000006.F10NTSN ... F1 0
3 Trade G0000005.N10NTSN ... N1 0
4 Trade G0000006.F10NTSN ... F1 0
.. ... ... ... ... ...
163 Trade G0000007.F10NTSN ... F1 0
164 Trade G0000004.F10NTSN ... F1 0
166 Trade G0000014.F10NTSN ... F1 0
167 Trade G0000006.N10NTSN ... N1 0
168 Trade G0000008.F10NTSN ... F1 1
[167 rows x 80 columns]
当您执行DataFrame.merge时,您正在合并您命名的列列表等上的两个数据帧。当您执行左合并(SQL等效的左联接)时,您保留了所有左表键,但仍然将右数据帧中的所有列放入合并中
我的建议是明确声明您想要的列,这可能不是最好的解决方案,但它会起作用
大意是:
注意,只有当df2中的所有列都是您想要保留的列时,这才有效
如果有不同的列,则相同的概念可以工作,只需使用两个不同的列列表即可
也许有更好的办法,但这就是我解决这个问题的方法
编辑以快速添加您甚至可以通过编程方式拖动列列表来设置列列表:
如果两个数据帧中的重复列相同,则应将它们添加到
on
列表中。如果您有名称相同但数据不同的列,并且只想保留其中的一部分,则可以合并数据帧的片段。比如说将从{}而不是{}和{}从{}而不是{}向您提供{}、{}和{}
这并不完全是您想要的答案,但您可以轻松地在事后处理重复的列
你能行
或者,如果倒过来比较容易,您可以保留任意一列
如果我不得不猜测您的问题的解决方案是,您的一个表中存在某种重复条目
相关问题 更多 >
编程相关推荐