具有两个数据帧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”。
对于列“ C”和“ D”,用df2数据更新df1的最佳方法是什么?
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
答案 0 :(得分:1)
这是工作,只需分隔行,因为update会更改原始df,因此不需要分配。
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