在另一个datafram的值上更新dataframe

2024-10-01 05:03:30 发布

您现在位置:Python中文网/ 问答频道 /正文

我想更新数据帧X的值从数据帧从Y

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

当然,我的数据帧更大。你知道吗


Tags: 数据a2dataframea1b0a0b2b1
2条回答

如果需要在两个df中的A, B列中添加缺少的值,我认为需要^{}^{}

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

1。两个数据帧具有相同的索引

这就是你在问题的例子中提出的情况。 您可能需要使用update方法:

>>> X.update(Y)
>>> X

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

如果行在X和Y中的顺序不同,它也会起作用:

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

>>> X.update(Y)
>>> X
    A   B     C     D
0  A0  B0  C0xx  D0xx
1  A1  B1  C1xx  D1xx
2  A2  B2    C2    D2

2。不同指标

如果Y有不同的索引:

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

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

如果可以找到另一个可用作索引的列(标识行以便它们与要替换的行匹配),那么仍然可以使用update。我以“A”列为例,但多索引也可以。你知道吗

>>> X2, Y2 = X.set_index("A"), Y.set_index("A")
>>> X2.update(Y2)
>>> X2.reset_index(inplace=True)
>>> X2
    A   B     C     D
0  A0  B0  C0xx  D0xx
1  A1  B1  C1xx  D1xx
2  A2  B2    C2    D2

相关问题 更多 >