首页 > 解决方案 > 如何将值从熊猫数据帧填充到另一个具有不同日期时间索引的数据帧

问题描述

我有两个数据框。一个有 5 分钟的粒度 (df1),另一个按天索引 (df2)。在本例中,日期在 7:10 结束

df1:

            Date    Close
2019-06-20 07:00:00 2927.25
2019-06-20 07:05:00 2927.00
2019-06-20 07:10:00 2926.75
2019-06-21 07:00:00 2932.25
2019-06-21 07:05:00 2932.25
2019-06-21 07:10:00 2931.00
2019-06-24 07:00:00 2941.75
2019-06-24 07:05:00 2942.25
2019-06-24 07:10:00 2941.50
2019-06-25 07:00:00 2925.50
2019-06-25 07:05:00 2926.50
2019-06-25 07:10:00 2926.50

df2:

            range                       
Date                            
2019-06-20  115.0
2019-06-21  86.0    
2019-06-24  52.0
2019-06-25  132.0   

现在我想从 df2 的“范围”列中获取值,并将它们重复地注入到 df1 的新列中。

它应该如下所示:

            Date    Close       range
2019-06-20 07:00:00 2927.25     115.0
2019-06-20 07:05:00 2927.00     115.0
2019-06-20 07:10:00 2926.75     115.0
2019-06-21 07:00:00 2932.25     86.0    
2019-06-21 07:05:00 2932.25     86.0    
2019-06-21 07:10:00 2931.00     86.0    
2019-06-24 07:00:00 2941.75     52.0
2019-06-24 07:05:00 2942.25     52.0
2019-06-24 07:10:00 2941.50     52.0
2019-06-25 07:00:00 2925.50     132.0
2019-06-25 07:05:00 2926.50     132.0
2019-06-25 07:10:00 2926.50     132.0

不幸的是我不知道如何开始这就是为什么没有“我的尝试”代码你会怎么做?

标签: pythonpandasdataframe

解决方案


首先将日期类列转换为熊猫日期时间序列:

df1['Date'] = pd.to_datetime(df1['Date'])
df2.index = pd.to_datetime(df2.index)

使用Series.dt.date+将值从Series.map映射到:rangedf2df1

df1['range'] = df1['Date'].dt.date.map(df2.set_index(df2.index.date)['range'])

或者它也可以使用DataFrame.merge

df1.assign(k=df1['Date'].dt.date).merge(df2.assign(k=df2.index.date), on='k').drop('k', 1)

结果:

                  Date    Close  range
0  2019-06-20 07:00:00  2927.25  115.0
1  2019-06-20 07:05:00  2927.00  115.0
2  2019-06-20 07:10:00  2926.75  115.0
3  2019-06-21 07:00:00  2932.25   86.0
4  2019-06-21 07:05:00  2932.25   86.0
5  2019-06-21 07:10:00  2931.00   86.0
6  2019-06-24 07:00:00  2941.75   52.0
7  2019-06-24 07:05:00  2942.25   52.0
8  2019-06-24 07:10:00  2941.50   52.0
9  2019-06-25 07:00:00  2925.50  132.0
10 2019-06-25 07:05:00  2926.50  132.0
11 2019-06-25 07:10:00  2926.50  132.0

推荐阅读