我正在尝试使用数据帧 df_2 中包含的值更新数据帧 df_1。df_1 ID B val val2 0 1 2 2 1 1 2 31 2 1 11 3 1 11 4 1 1df_2 ID B val val2 0 1 1 3 1 1 3 31 3 3 3我想要的结果在 df_3 中报告如下:df_3 ID B val val2 0 1 1 3 1 1 3 31 2 1 11 3 3 31 4 1 1连接列是 ID 和 B,当 df_2 匹配时,我会替换这些值。关于值,df_2 包含与 df_1 完全相同的列。有两个问题提到了这个问题:Python pandas join on with overwrite和Python pandas - specific merge/replacement。这些问题提到了我遇到的完全相同的问题,但是当我尝试报告连接需要很长时间的解决方案时,我有一个巨大的数据集,我个人认为提到的解决方案适用于小块数据。此外,这些问题都是陈旧的,所以我想知道大熊猫是否有任何消息可以加速这个过程。
1 回答
慕妹3242003
TA贡献1824条经验 获得超6个赞
您需要使用cumcount创建附加键,因为 ID 不是唯一的,然后我们concat 使用drop_duplicates
df1['keys']=df1.groupby('ID').cumcount()
df2['keys']=df2.groupby('ID').cumcount()
pd.concat([df1,df2]).drop_duplicates(['ID','keys'],keep='last').drop('keys',1).sort_index()
Out[31]:
ID B val val2
0 0 1 1 3
1 1 1 3 3
2 1 2 1 1
更新
df1.set_index(['ID','B'],inplace=True)
df1.update(df2.set_index(['ID','B']))
df1=df1.reset_index()
df1
Out[258]:
ID B val val2
0 0 1 1.0 3.0
1 1 1 3.0 3.0
2 1 2 1.0 1.0
3 1 3 3.0 3.0
4 1 4 1.0 1.0
添加回答
举报
0/150
提交
取消