Python 多索引数据帧行替换

Python 多索引数据帧行替换,python,pandas,dataframe,Python,Pandas,Dataframe,我有两个多索引数据帧。 一个是我的参考(大约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

我有两个多索引数据帧。 一个是我的参考(大约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

您可以使用
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)

您可以尝试替换索引匹配上的值,如下所示:

for ind in df2.index:
    df1.loc[ind, 'Value'] = df2.loc[ind, 'Value']
如果要替换行,请执行以下操作:

for ind in df2.index:
    df1.loc[ind,] = df2.loc[ind,]

我尝试了合并(和查找以加入附加…),它添加了一个新列,而不是替换原始dfit中的值。它添加了2列,然后您只需要使用
np替换值。其中
,如前所述。如果要删除这些列,请使用
pd.drop
,这样使用.loc非常有效!没有复杂的合并或列删除!我用你的第二个代码替换行,它在一台电脑上工作,但在另一台电脑上,它有回溯:元组索引超出范围