使用 pandas/python 合并/合并两个 csv

Mad*_*tre 5 python csv pandas

我有两个 csvs,我想合并或合并这些 csvs 作为左连接......我的关键列是“id”,我在两个 csvs 中有与“result”相同的非关键列,但我想覆盖“result”如果第二个 CSV 的“结果”列中存在任何值,则为列。我如何使用 Pandas 或任何脚本语言来实现这一点。请查看我的最终预期输出。

输入

输入.csv:

id,scenario,data1,data2,result
1,s1,300,400,"{s1,not added}"
2,s2,500,101,"{s2 added}"
3,s3,600,202,
Run Code Online (Sandbox Code Playgroud)

输出.csv:

id,result
1,"{s1,added}"
3,"{s3,added}"
Run Code Online (Sandbox Code Playgroud)

预期产出

final_output.csv

id,scenario,data1,data2,result
1,s1,300,400,"{s1,added}"
2,s2,500,101,"{s2 added}"
3,s3,600,202,"{s3,added}"
Run Code Online (Sandbox Code Playgroud)

当前代码:

import pandas as pd

a = pd.read_csv("input.csv")
b = pd.read_csv("output.csv")
merged = a.merge(b, on='test_id',how='left')
merged.to_csv("final_output.csv", index=False)
Run Code Online (Sandbox Code Playgroud)

题:

使用此代码,我获得了两次结果列。我只想要一次,如果该列中存在值,它应该覆盖。如何获得单个结果列?

小智 2

试试这个,这也有效

import pandas as pd
import numpy as np
c=pd.merge(a,b,on='id',how='left')
lst=[]
for i in c.index:
    if(c.iloc[i]['result_x']!=''):
         lst.append(c.iloc[i]['result_x'])
    else:
         lst.append(c.iloc[i]['result_y'])
c['result']=pd.Series(lst)
del c['result_x']
del c['result_y']
Run Code Online (Sandbox Code Playgroud)