python - 在 Pandas 中将每日多索引数据上采样为每小时样本
问题描述
我有一个看起来与此类似的数据框:
time currency rate
2021-02-22 00:00:00+00:00 USD 54410.856295
2021-02-23 00:00:00+00:00 USD 48691.894832
2021-02-24 00:00:00+00:00 USD 49849.378714
2021-02-25 00:00:00+00:00 USD 46992.665450
2021-02-26 00:00:00+00:00 USD 46551.487477
2021-02-22 00:00:00+00:00 EUR 50410.856295
2021-02-23 00:00:00+00:00 EUR 41691.894832
2021-02-24 00:00:00+00:00 EUR 40849.378714
2021-02-25 00:00:00+00:00 EUR 42992.665450
2021-02-26 00:00:00+00:00 EUR 42551.487477
我想做的是将每日数据上采样到每小时,所以我有按货币计算的每小时费率。我尝试了以下方法:
df.index = pd.DatetimeIndex(pd.to_datetime(df['time']))
df['time'] = df.resample('H').ffill()
但它失败了,因为“时间”列不是唯一的,所以我想我需要一个多索引来做到这一点。我已经尝试了几件事,但没有运气。
解决方案
尝试设置time
为索引,然后groupby
:
(df.set_index('time').groupby('currency')
.apply(lambda x: x.resample('H').ffill())
.reset_index('currency', drop=True)
.reset_index()
)
输出:
time currency rate
0 2021-02-22 00:00:00+00:00 EUR 50410.856295
1 2021-02-22 01:00:00+00:00 EUR 50410.856295
2 2021-02-22 02:00:00+00:00 EUR 50410.856295
3 2021-02-22 03:00:00+00:00 EUR 50410.856295
4 2021-02-22 04:00:00+00:00 EUR 50410.856295
.. ... ... ...
189 2021-02-25 20:00:00+00:00 USD 46992.665450
190 2021-02-25 21:00:00+00:00 USD 46992.665450
191 2021-02-25 22:00:00+00:00 USD 46992.665450
192 2021-02-25 23:00:00+00:00 USD 46992.665450
193 2021-02-26 00:00:00+00:00 USD 46551.487477
[194 rows x 3 columns]
推荐阅读
- python-3.x - 在 Azure 中部署 Python-Flask api
- iphone - 加大尺寸 iPhone 的 UITableViewCell ContentView 尺寸问题
- jpa - 如何从实体中获取单个字段值的列表?
- angular-material - 字体选择器 - 棱角材料设计
- javascript - 为什么我的网页会为此 Google Charts JS 文件请求并获得 404?
- python - 在centos 6上安装django(sqlite3错误)
- payment-gateway - 如何在 Adyen Payment-Gateway 中启用授权
- javascript - 从数组中检索值的更简单方法
- python - 如何为 IBM Watson 的语音到文本服务 Web-socket 端点找到必要的访问 Web 令牌?
- sql-server - 如何在 SQL Server 中对时间列(毫秒)求和