使用另一个具有重复索引的数据帧更新数据帧

Ben*_*ère 6 python pandas

我正在尝试根据另一个数据框更新数据框。我尝试使用 df.update 解决索引可以重复的问题,从而引发错误:ValueError: cannot reindex from a duplicate axis

知道怎么做吗?

例如:

d1 = pd.DataFrame({'ticket': ['a','b','c'], 'n': ['10','20','30'], 
                   'q': ['100','120','130'],'description': ['da','db','dc']})
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

d2 = pd.DataFrame({'ticket': ['a','a','b'], 'n': ['40','50','60'], 
                   'q': ['150','180','200']})
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

预期结果是

pd.DataFrame({'ticket': ['a','a','b','c'], 'n': ['40','50','60', '30'], 
              'q': ['150','180','200','130'], 'description': ['da','da','db','dc']})
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

我尝试这样做 d1.set_index('ticket', inplace=True) d1.update(d2.set_index('ticket'))但提出了上述错误

ank*_*_91 5

让我们尝试使用combine_firstset_indexreindex获得所需的列顺序:

final=(d2.set_index('ticket').combine_first(d1.set_index('ticket'))
                  .reset_index().reindex(columns=d1.columns))
Run Code Online (Sandbox Code Playgroud)
  ticket   n    q description
0      a  40  150          da
1      a  50  180          da
2      b  60  200          db
3      c  30  130          dc
Run Code Online (Sandbox Code Playgroud)