字典x.update(y)for pandas DataFrames?

时间:2015-03-30 15:15:25

标签: python pandas merge

我坐在一个非常简单的问题面前。我有两个带有一些常见指数的pandas DataFrame,如下所示:

import pandas as pd
x = pd.DataFrame(index=[1, 2, 3, 4],
                 data={'d': [5, 5, 5, 5]})
y = pd.DataFrame(index=[3, 4, 5, 6],
                 data={'d':  [6, 6, 6, 6]})

我现在要做的是按x更新y。这对我来说意味着三件事:

  1. 索引1, 2仅位于x而非y。保留x
  2. 的值
  3. 指数3, 4xy中的常见索引。使用y
  4. 中的新信息更新值
  5. 指数5, 6仅在y中。将它们各自的值添加到x
  6. 总的来说,结果应如下所示:

    x = pd.DataFrame(index=[1, 2, 3, 4, 5, 6],
                     data={'d': [5, 5, 6, 6, 6, 6]})
    

    根据python词典思考,我尝试了x.update(y),它执行了步骤1.和2.但是没有做第3步。 我相信这是一个单行,但我找不到它。

    附录

    我提到了字典(索引为关键字),方法如下:

    a = {1: 5,
         2: 5,
         3: 5,
         4: 5}
    
    b = {3: 6,
         4: 6,
         5: 6,
         7: 6}
    
    a.update(b)
    

    它返回:

    {1: 5, 2: 5, 3: 6, 4: 6, 5: 6, 7: 6}
    

1 个答案:

答案 0 :(得分:1)

您可以调用combine_first但是使用y作为目标,这将覆盖y中缺少的x值:

In [75]:

y.combine_first(x)
Out[75]:
   d
1  5
2  5
3  6
4  6
5  6
6  6

您不能使用update来实现您想要的效果,因为这只会更新现有值:

In [79]:

x.update(y)
x
Out[79]:
   d
1  5
2  5
3  6
4  6