【问题标题】:pandas: updating column values when merging DataFramespandas:合并 DataFrame 时更新列值
【发布时间】:2016-09-05 16:32:57
【问题描述】:

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

所以如果两个数据框是:

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])

非常感谢!

【问题讨论】:

    标签: python pandas dataframe merge


    【解决方案1】:

    你想要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
    

    【讨论】:

    • 确实,感谢您的快速答复!在这种情况下,它需要 df2.combine_first(df1) 才能获得所需的输出(因此第二个数据帧调用该函数)。
    猜你喜欢
    • 1970-01-01
    • 2020-06-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-29
    • 2018-08-08
    相关资源
    最近更新 更多