【问题标题】:Dealing with Duplicate Dates in Pandas处理 Pandas 中的重复日期
【发布时间】:2019-01-08 07:18:46
【问题描述】:

问题是我有一个大型数据集,其中缺少日期条目并且还重复。我不能删除它们中的任何一个,所以我需要添加缺失的日期并将相应的列设为 NaN。 这是它的示例代码。

df = pd.DataFrame({
'timestamps': pd.to_datetime(
    ['2016-11-15 1:00','2016-11-16 2:00','2016-11-16 3:00','2016-11-18 4:00']),
'values':['a','b','c','d']})
 df.index = pd.DatetimeIndex(df['timestamps']).floor('D')

 all_days = pd.date_range(df.index.min(), df.index.max(), freq='D')

在搜索时,我发现我们不应该使用df.reindex(),因为它无法处理重复项。所以另一种解决方案是使用 df.loc[all_days] 但是,每次我将它用作 df.loc[all_days] = [0,0] 它只是说我需要添加到数据框中的缺失日期不在索引中。

应该是这样的:

           timestamps             values
2016-11-15  "2016-11-15 01:00:00"  a
2016-11-16  "2016-11-16 02:00:00"  b
2016-11-16  "2016-11-16 03:00:00"  c
2016-11-18  "2016-11-18 04:00:00"  d`

到这里:

timestamps             values
2016-11-15  "2016-11-15 01:00:00"  a
2016-11-16  "2016-11-16 02:00:00"  b
2016-11-16  "2016-11-16 03:00:00"  c 
2016-11-17  NaN                    NaN
2016-11-18  "2016-11-18 04:00:00"  d

【问题讨论】:

    标签: python pandas date duplicates time-series


    【解决方案1】:

    您可以将all_days 设置为数据框,然后使用df 进行外连接,然后删除新的不必要的列:

    new_df = df.join(all_days.to_frame(), how='outer').drop(0,1)
    
    >>> new_df
                        timestamps values
    2016-11-15 2016-11-15 01:00:00      a
    2016-11-16 2016-11-16 02:00:00      b
    2016-11-16 2016-11-16 03:00:00      c
    2016-11-17                 NaT    NaN
    2016-11-18 2016-11-18 04:00:00      d
    

    【讨论】:

    • 漂亮的囊。使用合并非常好。
    • 感谢@ScottBoston!但我意识到使用join 而不是merge 更简洁(尽管两者都应该工作)
    猜你喜欢
    • 2022-08-08
    • 1970-01-01
    • 1970-01-01
    • 2014-03-04
    • 1970-01-01
    • 2011-02-18
    • 2020-01-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多