亲爱的,我要解决以下问题:我有一个包含分钟数据(df.minute)的Pandas数据框,另一个包含每日数据(df.daily)的数据框。分钟数据并不均匀:在某些日子里可能会有更多观察结果。目标是将df.daily中包含的数据分配给df.minute。换句话说,以df.daily中的每一天取数据并将其分配给df.minute中与日期相对应的所有行。我很确定这可以不用循环就可以完成。非常感谢
df.minute
time value
2016-07-30 17:00:00 102.00
2016-07-30 17:01:00 102.12
2016-07-30 17:02:00 102.00
2016-07-30 17:03:00 102.99
2016-07-30 17:04:00 102.80
...
2016-07-31 11:40:00 100.45
2016-07-31 11:41:00 100.52
2016-07-31 11:42:00 100.55
2016-07-31 11:43:00 100.50
2016-07-31 11:44:00 100.00
...
2016-08-02 12:15:00 102.50
2016-08-02 12:16:00 102.54
2016-08-02 12:17:00 102.58
2016-08-02 12:18:00 102.65
2016-08-02 12:19:00 102.49
...
df.daily
time value
2016-07-29 0.1
2016-07-30 0.2
2016-07-31 0.3
2016-08-01 0.4
2016-08-02 0.5
2016-08-03 0.6
2016-08-04 0.7
...
结果应该是
df.minute
time value
2016-07-30 17:00:00 0.2
2016-07-30 17:01:00 0.2
2016-07-30 17:02:00 0.2
2016-07-30 17:03:00 0.2
2016-07-30 17:04:00 0.2
...
2016-07-31 11:40:00 0.3
2016-07-31 11:41:00 0.3
2016-07-31 11:42:00 0.3
2016-07-31 11:43:00 0.3
2016-07-31 11:44:00 0.3
...
2016-08-02 12:15:00 0.5
2016-08-02 12:16:00 0.5
2016-08-02 12:17:00 0.5
2016-08-02 12:18:00 0.5
2016-08-02 12:19:00 0.5
...
答案 0 :(得分:0)
将map
与floor
一起用于从datetime
s中删除时间:
df1['new'] = df1['time'].dt.floor('d').map(df2.set_index('time')['value'])
print (df1)
time value new
0 2016-07-30 17:00:00 102.00 0.2
1 2016-07-30 17:01:00 102.12 0.2
2 2016-07-30 17:02:00 102.00 0.2
3 2016-07-30 17:03:00 102.99 0.2
4 2016-07-30 17:04:00 102.80 0.2
5 2016-07-31 11:40:00 100.45 0.3
6 2016-07-31 11:41:00 100.52 0.3
7 2016-07-31 11:42:00 100.55 0.3
8 2016-07-31 11:43:00 100.50 0.3
9 2016-07-31 11:44:00 100.00 0.3
10 2016-08-02 12:15:00 102.50 0.5
11 2016-08-02 12:16:00 102.54 0.5
12 2016-08-02 12:17:00 102.58 0.5
13 2016-08-02 12:18:00 102.65 0.5
14 2016-08-02 12:19:00 102.49 0.5