【问题标题】:Comparing two similar dataframes and filling in missing values of one dataframe比较两个相似的数据帧并填充一个数据帧的缺失值
【发布时间】:2017-08-16 11:30:27
【问题描述】:

所以我有两个数据帧,一个是数据帧字典的单个数据帧stocks['OPK'],另一个只是一个简单的 Pandas 数据帧df

这是 df 的一部分,df.loc['2010-01-04':, 'Open'],我很感兴趣将其与其他数据帧进行比较。

Date          Open
2010-01-04    1.80
2010-01-05    1.64
2010-01-06    1.90
2010-01-07    1.79
2010-01-08    1.92
2010-01-11    1.90
2010-01-12    1.89
2010-01-13    1.82
2010-01-14    1.84
2010-01-15    1.85
2010-01-19    1.77

这是另一个数据框stocks['OPK'].Open

2010-01-04    1.80
2010-01-05    1.64
2010-01-06     NaN 
2010-01-07    1.79
2010-01-08     NaN 
2010-01-11    1.90
2010-01-12    1.89
2010-01-13    1.82
2010-01-14     NaN 
2010-01-15    1.85
2010-01-19     NaN 

如你所知,第二个数据框有缺失值。

由于两个索引都是日期时间格式,我希望能够将stock['OPK'].Opendf.loc['2010-01-04':, 'Open'] 进行比较,并用第一个数据帧df 中的值填充缺失值

我可以用这段代码做一个布尔过滤器,但我不知道如何从那里开始:

stocks['OPK'].Open == df.loc['2010-01-04':, 'Open']

pd.merge 及其各自选项的问题在于它似乎添加了额外的 列。我只想通过比较可能具有缺失值的另一个数据框来填充缺失值(如果有的话)。

谢谢。

【问题讨论】:

    标签: python-3.x pandas dataframe merge missing-data


    【解决方案1】:

    你可以使用fillna()

    df2 = df2.fillna(df1)
    

    另一种更快的方法是 combine_first

    df2 = df2.combine_first(df1)
    

    两者都会返回

        Date    Open
    0   2010-01-04  1.80
    1   2010-01-05  1.64
    2   2010-01-06  1.90
    3   2010-01-07  1.79
    4   2010-01-08  1.92
    5   2010-01-11  1.90
    6   2010-01-12  1.89
    7   2010-01-13  1.82
    8   2010-01-14  1.84 
    9   2010-01-15  1.85
    10  2010-01-19  1.77
    

    【讨论】:

    • 实际上,这两个答案似乎都有效。我的数据框只是有一个错误。谢谢。
    • 顺序好像没关系?如果我使用 df.fillna(df2)df2.fillna(df) 两者似乎都会产生相同的答案,除非我弄错了。
    • 顺序确实很重要,因为第一个数据帧优先。只有第一个数据帧的缺失值会被第二个数据帧的真实值填充
    猜你喜欢
    • 1970-01-01
    • 2020-11-05
    • 1970-01-01
    • 2019-06-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-21
    相关资源
    最近更新 更多