[英]Multiindex dataframe rows replacement
我有兩個多索引數據幀。 一個是我的參考(大約 37000 行),另一個是較少的行(例如,10)。
我想用第二個的值替換大的行。
示例df1
:
lvl1 lvl2 lvl3 Value Value2
A 1 I 0,862877333 0,181795348
1 II 0,787022218 0,292046262
1 III 0,40516176 0,445079108
2 I 0,882167166 0,683954412
2 IV 0,743618024 0,103097267
3 I 0,901062673 0,729188996
3 II 0,529989452 0,715379923
3 IV 0,740272198 0,792457421
B 1 I 0,548587694 0,637462653
1 II 0,201284924 0,084391963
2 I 0,999118031 0,558207224
2 II 0,63353019 0,251377184
2 V 0,694294638 0,685050861
3 V 0,436723389 0,310871641
3 VI 0,630832871 0,869957421
3 VII 0,157874482 0,639308814
示例df 2
:
lvl1 lvl2 lvl3 Value Value2
A 1 I 0,8654 1
B 2 II 0,264 2
結果df3
:
lvl1 lvl2 lvl3 Value Value2
A 1 I **0,8654** 0,181795348
1 II 0,787022218 0,292046262
1 III 0,40516176 0,445079108
2 I 0,882167166 0,683954412
2 IV 0,743618024 0,103097267
3 I 0,901062673 0,729188996
3 II 0,529989452 0,715379923
3 IV 0,740272198 0,792457421
1 I 0,548587694 0,637462653
B 1 II 0,201284924 0,08439196
2 I 0,999118031 0,558207224
2 II **0,264** 0,251377184
2 V 0,694294638 0,685050861
3 V 0,436723389 0,310871641
3 VI 0,630832871 0,869957421
3 VII 0,157874482 0,639308814
您可以嘗試替換索引匹配上的值,如下所示:
for ind in df2.index:
df1.loc[ind, 'Value'] = df2.loc[ind, 'Value']
如果您想替換行:
for ind in df2.index:
df1.loc[ind,] = df2.loc[ind,]
你也許可以使用pd.merge
import numpy as np
import pandas as pd
temp = pd.DataFrame({"lvl1": ["A","A","B","B"], "lvl2": [1,2,1,2], "lvl3": ["I","II","I","II"], "Value": [0.8628773,0.7870, 0.63353, 0.6998]})
replace = pd.DataFrame({"lvl1": ["A","B"], "lvl2": [1,2], "lvl3": ["I","II"], "Value": [0.8654, 0.264], "Value2": [1,2]})
df = pd.merge(temp, replace, how="left", on=["lvl1","lvl2","lvl3"])
df["Value_x"] = np.where(df["Value_y"].notnull(), df["Value_y"], df["Value_x"])
# df.drop(["Value_y", "Value2"], axis=1, inplace=True)
你可以用
df1.update(df2['Value'])
或者如果你想替換所有的列,
df1.update(df2)
請注意,與許多數據框操作不同,它就地工作——它修改 df1 而不是返回副本。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.