我有这样的数据框:
df = pd.DataFrame({"flag":["1","0","1","0"],
"val":["111","111","222","222"], "qwe":["","11","","12"]})
它给出:
flag qwe val
0 1 111
1 0 11 111
2 1 222
3 0 12 222
然后我正在像这样过滤第一个数据帧:
dff = df.loc[df["flag"]=="1"]
**was:**
dff.loc["qwe"] = "123"
**edited:** (setting all rows in column "qwe" to "123")
dff["qwe"] = "123"
现在我需要以以下方式合并/加入df和dff:
flag qwe val
0 1 123 111
1 0 11 111
2 1 123 222
3 0 12 222
仅当df值为空时,才从dff添加'qwe'更改。
类似这样的东西:
pd.merge(df, dff, left_index=True, right_index=True, how="left")
给予
flag_x qwe_x val_x flag_y qwe_y val_y
0 1 111 1 111
1 0 11 111 NaN NaN NaN
2 1 222 1 222
3 0 12 222 NaN NaN NaN
因此,在那之后,我需要删除flag_y,val_y,重命名_x列并手动合并qwe_x和qwe_y。但是有什么方法可以使它更容易吗?
答案 0 :(得分:2)
pd.merge
有一个on
参数,可用于在不同数据框中联接具有相同名称的列。
尝试:
pd.merge(df, dff, how="left", on=['flag', 'qwe', 'val'])
但是,我认为您根本不需要这样做。您可以使用df.loc来有条件地分配一个值,从而产生相同的结果:
df.loc[(df["flag"] == "1") & (df['qwe'].isnull()), 'qwe'] = 123
答案 1 :(得分:0)
在完成更改后,对我来说,此代码有效:
c1 = dff.combine_first(df)
它产生:
flag qwe val
0 1 123 111
1 0 11 111
2 1 123 222
3 0 12 222
我到底在找谁。