多索引熊猫更新

时间:2019-01-10 02:24:01

标签: pandas

具有两个数据帧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

1 个答案:

答案 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