【问题标题】:Pandas Compare - How to compare 2 date columns in 2 separate dataframesPandas 比较 - 如何比较 2 个单独数据框中的 2 个日期列
【发布时间】:2020-02-10 06:58:26
【问题描述】:

我有一次缺少日期的 csv,我创建了一个相同日期范围的新 df,没有缺少日期。我想比较两个 csv 并在原始 csv 中有空白日期的地方放置一个 NaN:

例子:

    DateTime            Measurement Dates
0   2016-10-09 00:00:00 1021.9      2016-10-09
1   2016-10-11 00:00:00 1019.9      2016-10-10
2   2016-10-12 00:00:00 1015.8      2016-10-11
3   2016-10-13 00:00:00 1013.2      2016-10-12
4   2016-10-14 00:00:00 1005.9      2016-10-13

所以我希望新表是:

    DateTime            Measurement Dates
0   2016-10-09 00:00:00 1021.9      2016-10-09
1   Nan        00:00:00 Nan         2016-10-10
2   2016-10-11 00:00:00 1015.8      2016-10-11
3   2016-10-12 00:00:00 1013.2      2016-10-12
4   2016-10-13 00:00:00 1005.9      2016-10-13

然后我将删除 DateTime 列,因此最终的 df 是缺少测量值的完整日期列表。

到目前为止我使用的代码:

new_dates = pandas.date_range(start = '2016-10-09 00:00:00', end = '2017-10-09 00:00:00')

merged = pandas.merge(measurements, updated_dates,left_index=True, right_index=True)

【问题讨论】:

  • 没有意义,在您的解释中,您说您有一个缺少日期的 csv,但您的示例数据框没有缺少日期,只有输出。
  • 抱歉,如果不清楚。我已经合并了两个数据框,正如您在第一列 (DateTime) 中看到的那样,缺少日期 2016-10-10,但它存在于第三列 (Dates) 中。我希望能够比较这两列并确定缺少 2016-10-10 或任何其他日期。

标签: pandas csv date compare


【解决方案1】:

如果我对您的理解正确,您希望将DateTime 列重新采样为每日频率,并用NaN 填补空白:

# Use this line if your DateTime column is not datetime type yet
# df['DateTime'] = pd.to_datetime(df['DateTime'])

dates = pd.date_range(df['DateTime'].min(), df['DateTime'].max(), freq='D')
df = df.set_index('DateTime').reindex(dates).reset_index()

输出

       index  Measurement
0 2016-10-09       1021.9
1 2016-10-10          NaN
2 2016-10-11       1019.9
3 2016-10-12       1015.8
4 2016-10-13       1013.2
5 2016-10-14       1005.9

如果您有唯一的日期,您也可以使用resample。如果您的日期不是唯一的,它将聚合它们并取两个日期的mean:

df.set_index('DateTime').resample('D').mean()

输出

    DateTime  Measurement
0 2016-10-09       1021.9
1 2016-10-10          NaN
2 2016-10-11       1019.9
3 2016-10-12       1015.8
4 2016-10-13       1013.2
5 2016-10-14       1005.9

【讨论】:

  • 很酷,谢谢,我刚刚尝试运行您在上面提供的第一个请求并收到以下错误:“ValueError: cannot reindex from a duplicate axis”
  • 这意味着您的DateTime 列有重复,因此同一日期有多个测量值。
  • 第二种解决方案将起作用,但请注意,它会聚合同一日期的测量值,并取这些值的平均值。 @JNix
  • 好,如果有帮助别忘了accept the answer,这样其他人也可以得到帮助:) @JNix
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-08-22
  • 1970-01-01
  • 2022-11-13
  • 2022-06-30
  • 1970-01-01
  • 2018-08-08
  • 1970-01-01
相关资源
最近更新 更多