多重索引 pandas 更新

3

有两个数据框 df1 和 df2:

import pandas as pd
import numpy as np
import datetime

A = list(range(3,9))
B = [datetime.date(2019,1,1), datetime.date(2019,1,3), datetime.date(2019,1,2), datetime.date(2019,1,8), datetime.date(2017,6,2), datetime.date(2011,5,6)]
C = list('abcdef')
D = list('LMNOPQ')
E = list(range(5,11))

df1 = pd.DataFrame({'A': A, 'B': B, 'C': C, 'D': D, 'E': E})

a = list(range(3,7))
b = [datetime.date(2010,1,1), datetime.date(2019,1,3), datetime.date(2019,1,2), datetime.date(2010,2,10)]
c = list('xymb')
d = list('GZYP')

df2 = pd.DataFrame({'A': a, 'B': b, 'C': c, 'D': d})

行索引1和2具有相同的列“A”和“B”。

如何以最佳方式更新df1中的列'C'和'D'的数据?

df3 = df1.set_index(['A', 'B']).update(df2.set_index(['A', 'B']))

无法工作

预期输出为:

    A   B           C   D   E
0   3   2019-01-01  a   L   5
1   4   2019-01-03  y   Z   6
2   5   2019-01-02  m   Y   7
3   6   2019-01-08  d   O   8
4   7   2017-06-02  e   P   9
5   8   2011-05-06  f   Q   10
1个回答

4

这是一项任务,只需要将它分成几行即可。由于更新将更改原始df,所以无需分配(assign)。

df1=df1.set_index(['A', 'B'])
df1.update(df2.set_index(['A', 'B']))
df1=df1.reset_index()
df1
   A          B  C  D   E
0  3 2019-01-01  a  L   5
1  4 2019-01-03  y  Z   6
2  5 2019-01-02  m  Y   7
3  6 2019-01-08  d  O   8
4  7 2017-06-02  e  P   9
5  8 2011-05-06  f  Q  10

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接