我time-series
下面有两个。df1
具有仅DateTime
包含日期而不包含时间的格式的索引。df2
具有完整的日期时间索引,DateTime
格式也是如此。在完整数据中,df1
比df2
行数要短得多。
如您所见,这两个数据集的时间跨度为4月2日至6日。但是,df1会跳过某些日期,而在df2中,所有日期都可用。注意:在此示例中,仅跳过了奇数日期,但在完整数据中并非如此。
df1
value1
date
2016-04-02 16
2016-04-04 76
2016-04-06 23
df2
value2
DateTime
2016-04-02 07:45:00 257.96
2016-04-02 07:50:00 317.58
2016-04-02 07:55:00 333.39
2016-04-03 08:15:00 449.96
2016-04-03 08:20:00 466.42
2016-04-03 08:25:00 498.56
2016-04-04 08:10:00 454.73
2016-04-04 08:15:00 472.45
2016-04-04 08:20:00 489.85
2016-04-05 07:30:00 169.54
2016-04-05 07:35:00 276.13
2016-04-05 07:40:00 293.70
2016-04-06 07:10:00 108.05
2016-04-06 07:15:00 179.21
2016-04-06 07:20:00 201.80
我想按索引合并两个数据集。df1应该控制要保留的日期。该预期的结果如下。
value2 value1
DateTime
2016-04-02 07:45:00 257.96 16
2016-04-02 07:50:00 317.58 16
2016-04-02 07:55:00 333.39 16
2016-04-04 08:10:00 454.73 76
2016-04-04 08:15:00 472.45 76
2016-04-04 08:20:00 489.85 76
2016-04-06 07:10:00 108.05 23
2016-04-06 07:15:00 179.21 23
2016-04-06 07:20:00 201.80 23
这是我的尝试。
result= pd.concat([df1, df1], axis=1, sort=True).dropna(how='all')
但是结果与我期望的不同。
在这里可以创建新的helper列,该列由日期时间填充,没有时间,使用DatetimeIndex.normalize
:
df2['date'] = df2.index.normalize()
或者,如果使用日期DatetimeIndex.date
:
df2['date'] = df2.index.date
然后使用merge
默认的内部联接:
result= df1.merge(df2, left_index=True, right_on='date')
print (result)
value1 value2 date
DateTime
2016-04-02 07:45:00 16 257.96 2016-04-02
2016-04-02 07:50:00 16 317.58 2016-04-02
2016-04-02 07:55:00 16 333.39 2016-04-02
2016-04-04 08:10:00 76 454.73 2016-04-04
2016-04-04 08:15:00 76 472.45 2016-04-04
2016-04-04 08:20:00 76 489.85 2016-04-04
2016-04-06 07:10:00 23 108.05 2016-04-06
2016-04-06 07:15:00 23 179.21 2016-04-06
2016-04-06 07:20:00 23 201.80 2016-04-06
或使用merge_asof
,但它会与以前的匹配值合并,因此,仅当始终匹配日期时间而不df2
使用date
s from的时间时,才像上面一样工作df1
:
result= pd.merge_asof(df2, df1, left_index=True, right_index=True)
print (result)
value2 value1
DateTime
2016-04-02 07:45:00 257.96 16
2016-04-02 07:50:00 317.58 16
2016-04-02 07:55:00 333.39 16
2016-04-03 08:15:00 449.96 16
2016-04-03 08:20:00 466.42 16
2016-04-03 08:25:00 498.56 16
2016-04-04 08:10:00 454.73 76
2016-04-04 08:15:00 472.45 76
2016-04-04 08:20:00 489.85 76
2016-04-05 07:30:00 169.54 76
2016-04-05 07:35:00 276.13 76
2016-04-05 07:40:00 293.70 76
2016-04-06 07:10:00 108.05 23
2016-04-06 07:15:00 179.21 23
2016-04-06 07:20:00 201.80 23
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句