将每日数据分配给分钟数据Pandas Dataframe

时间:2019-02-20 10:18:04

标签: python pandas dataframe resampling

亲爱的,我要解决以下问题:我有一个包含分钟数据(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
...

1 个答案:

答案 0 :(得分:0)

mapfloor一起用于从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