熊猫比较-如何在2个单独的数据框中比较2个日期列

时间:2019-10-13 12:10:12

标签: pandas csv date compare

我曾经有一个缺少日期的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)

1 个答案:

答案 0 :(得分:0)

如果我对您的理解正确,那么您想将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