pandas:合并DataFrames时更新列值

时间:2016-05-10 15:27:51

标签: python pandas dataframe merge

如果值可用(即非空),通过使用第二个数据帧中的列值更新第一个数据帧中的值,是否有一种优雅的方法可以将两个列的值合并为两个不同数据帧中的相同名称第二个数据框?

因此,如果两个数据帧是:

df1 = pd.DataFrame([ 1,    2,    None, 3], columns=["a"], index=[0,1,2,3])
df2 = pd.DataFrame([ None, None, 4,    5], columns=["a"], index=[0,1,2,3])

然后所需的输出将是:

df3 = pd.DataFrame([ 1,    2,    4,    5], columns=["a"], index=[0,1,2,3])

虽然我可以通过首先执行merge()然后使用' apply()'来设想这样做的方法。使用自定义函数将结果列的值合并在一起,这看起来过于复杂。而且,我需要为多列执行此操作。有没有更优雅的方式来做到这一点?

我正在寻找的功能就像使用' overwrite_values = True'执行左合并一样,除了后一个参数当然不存在的事实。

有两列的稍微复杂的例子:

df1 = pd.DataFrame([ [1, 'a'],    [2, 'b'],    [None, None], [3, None] ], 
                   columns=["a", "b"], index=[0,1,2,3])
df2 = pd.DataFrame([ [None, None],[None, 'x'],[4, 'c'], [5, 'd'] ],
                   columns=["a", "b"], index=[0,1,2,3])

然后所需的输出将是:

df3 = pd.DataFrame([ [1, 'a'],    [2, 'x'],    [4, 'c'], [5, 'd']], 
                   columns=["a", "b"], index=[0,1,2,3])

非常感谢!

1 个答案:

答案 0 :(得分:2)

您想要combine_first

In [19]:
df1 = pd.DataFrame([ [1, 'a'],    [2, 'b'],    [None, None], [3, None] ], 
                   columns=["a", "b"], index=[0,1,2,3])
df2 = pd.DataFrame([ [None, None],[None, 'x'],[4, 'c'], [5, 'd'] ],
                   columns=["a", "b"], index=[0,1,2,3])
df1.combine_first(df2)

Out[19]:
     a  b
0  1.0  a
1  2.0  b
2  4.0  c
3  3.0  d