我想更新来自Y的数据帧中值的数据框架X。

X = pd.DataFrame({'A': ['A0', 'A1', 'A2'],
                  'B': ['B0', 'B1', 'B2'],
                  'C': ['C0', 'C1', 'C2'],
                  'D': ['D0', 'D1', 'D2']})

    A   B   C   D
0  A0  B0  C0  D0
1  A1  B1  C1  D1
2  A2  B2  C2  D2

Y = pd.DataFrame({'A': ['A0', 'A1'],
                  'B': ['B0', 'B1'],
                  'C': ['C0xx', 'C1xx'],
                  'D': ['D0xx', 'D1xx']})

    A   B     C     D
0  A0  B0  C0xx  D0xx
1  A1  B1  C1xx  D1xx


结果是:

    A   B   C   D
0  A0  B0  C0xx  D0xx
1  A1  B1  C1xx  D1xx
2  A2  B2  C2    D2


当然,我的数据框更大。

最佳答案

我认为如果需要在两个combine_first中的set_index列中添加缺失值,则需要A, Bdf

print (Y.set_index(['A','B']).combine_first(X.set_index(['A','B'])).reset_index())

    A   B     C     D
0  A0  B0  C0xx  D0xx
1  A1  B1  C1xx  D1xx
2  A2  B2    C2    D2


不幸的是update效果不好:

Y = pd.DataFrame({'A': ['A0', 'A1'],
                  'B': ['B0', 'B1'],
                  'C': ['C0xx', 'C1xx'],
                  'D': ['D0xx', 'D1xx']}, index=[2,1])
print (X)
    A   B   C   D
0  A0  B0  C0  D0
1  A1  B1  C1  D1
2  A2  B2  C2  D2

print (Y)
    A   B     C     D
2  A0  B0  C0xx  D0xx
1  A1  B1  C1xx  D1xx

X.update(Y)
print (X)
    A   B     C     D
0  A0  B0    C0    D0
1  A1  B1  C1xx  D1xx
2  A0  B0  C0xx  D0xx




X.set_index(['A','B']).update(Y.set_index(['A','B']))
print (X)
    A   B   C   D
0  A0  B0  C0  D0
1  A1  B1  C1  D1
2  A2  B2  C2  D2




print (Y.set_index(['A','B']).combine_first(X.set_index(['A','B'])).reset_index())
    A   B     C     D
0  A0  B0  C0xx  D0xx
1  A1  B1  C1xx  D1xx
2  A2  B2    C2    D2

关于python - 根据另一个数据框的值更新数据框,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45298852/

10-12 18:11
查看更多