提问人:MYK 提问时间:11/16/2023 最后编辑:FObersteinerMYK 更新时间:11/16/2023 访问量:35
如何按时间间隔移动极坐标中的列(其中另一列给出时间戳)?
How to shift columns in polars by a time interval (where another column is gives the timestamp)?
问:
在 polars 数据帧中,使用 .shift 方法比较连续的行是很常见的 - 例如
df.with_columns(difference_from_3_rows_ago = pl.col('myValue') - pl.col('myValue').shift(3))
但是,当您拥有时间索引数据时,基于行号对其进行操作并不理想。
有没有实现以下伪代码的东西?
(df
.with_columns(
difference_from_3d_ago = pl.col('myValue') - pl.col('myValue').shift('3d', by='myDateColumn'))
)
我希望有一个日期时间感知的.shift方法,否则我将进行一些自连接或一些检查以确保行偏移量是合适的
答:
1赞
Dean MacGregor
11/16/2023
#1
我认为这应该有效,尽管未经测试......
df.join(
df.select(
pl.col('myDateColumn').dt.offset_by('3d'),
pl.col('myValue').alias('difference_from_3d_ago')
), on='myDateColumn'
).with_columns(
difference_from_3d_ago = pl.col('myValue')-pl.col('difference_from_3d_ago')
)
它的工作原理是制作一个 df 版本,其中日期列偏移 3 天,并且要区分的列的别名。它在日期列上与自身联接,然后为您提供 3 天偏移的值。最后,从连接中获取原始值及其滞后版本的差值。
评论
0赞
MYK
11/21/2023
谢谢 - 是的,我做了这样的事情,但理想情况下我会避免为此加入。我正在研究 DataFrame 方法 - 也许那里有解决方案。upsample
0赞
Dean MacGregor
11/21/2023
您可以使用上采样来制作它,以便您可以确定您的班次将倒退多少天,但我不确定,即使有点怀疑,您是否会实现相对于联接的更好性能。联接非常高效。
评论
.search_sorted()
.dt.offset_by()