Python 更新\用df[cols]替换df[cols]
我有两个具有相同索引的df,我喜欢只在name==“A”时更新\替换col列表 所以我得到name==“A”的地方,我想把它替换掉 cols的lits->cols=[col1,col2,col3,col4] 所以我有这个dfPython 更新\用df[cols]替换df[cols],python,pandas,replace,updates,Python,Pandas,Replace,Updates,我有两个具有相同索引的df,我喜欢只在name==“A”时更新\替换col列表 所以我得到name==“A”的地方,我想把它替换掉 cols的lits->cols=[col1,col2,col3,col4] 所以我有这个df first_data={"col1":[2,3,4,5,7], "col2":[4,2,4,6,4], "col3":[7,6,9,11,2], "col4":[14,11,22,8,5], &
first_data={"col1":[2,3,4,5,7],
"col2":[4,2,4,6,4],
"col3":[7,6,9,11,2],
"col4":[14,11,22,8,5],
"name":["A","A","V","A","B"],
"n_roll":[8,2,1,3,9]}
df1=pd.DataFrame.from_dict(first_data)
df1
以及sec df
sec_df={"col1":[55,0,57,1,3],
"col2":[55,0,4,4,53],
"col3":[55,33,9,0,2],
"col4":[55,0,22,4,5],
"name":["A","A","V","A","B"],
"hight":[8,2,1,3,9]}
df2=pd.DataFrame.from_dict(sec_df)
df2
我喜欢这样抽烟
df1.loc[df1[“name”]=“A”][cols]=df2.loc[df2[“name”]=“A”][cols]
所以我想得到这个
data={"col1":[55,0,4,1,7],
"col2":[55,0,4,4,4],
"col3":[55,33,9,0,2],
"col4":[55,0,22,4,5],
"name":["A","A","V","A","B"],
"n_roll":[8,2,1,3,9]}
df=pd.DataFrame.from_dict(data)
df
IIUC您可以
更新:
df1 = df1.set_index("name", append=True)
df1.update(df2[df2["name"].eq("A")].set_index("name", append=True).filter(like="col"))
如果您不需要关心列名称
,只需要根据索引进行更新,您只需执行以下操作:
df1.update(df2[df2["name"].eq("A")].filter(like="col"))
name col1 col2 col3 col4 n_roll
0 A 55.0 55.0 55.0 55.0 8
1 A 0.0 0.0 33.0 0.0 2
2 V 4.0 4.0 9.0 22.0 1
3 A 1.0 4.0 0.0 4.0 3
4 B 7.0 4.0 2.0 5.0 9
我必须使用列列表,因为在实际数据中,名称不同,不可能使用“COL”这个词进行过滤,可能类似于:df1.update(df2[df2[“name”].eq(“a”))。当cols=[“col1”,“col2”,col3,“col4”]时,设置索引(“name”,append=True)[cols]