【发布时间】:2021-10-24 05:15:46
【问题描述】:
第一篇文章:我为草率的措辞提前道歉(如果这个问题在其他地方得到了令人作呕的回答,可能搜索不佳 - 也许我还不知道正确的搜索词)。
我有 10 分钟块中的数据,我想对按分钟分组的列(“输入”)执行计算(即 10 个单独的 60 秒块 - 不是滚动的 60 秒周期),然后存储所有十个计算在一个称为输出的列表中。
“秒”列记录 10 分钟内从 1 到 600 的秒数。如果在给定的秒数内没有输入数据,则该秒数没有行。所以,有些分钟有 60 行数据,有些只有一两行。
注意:计算 (my_function) 不是基本的,所以我不能使用 groupby 和 np.sum()、np.mean() 等 - 或者至少我不知道如何使用 groupby。
我有可以完成工作的代码,但它看起来很难看,所以我确信有更好的方法(可能有几个)。
output=[]
seconds_slicer = 0
for i in np.linspace(1,10,10):
seconds_slicer += 60
minute_slice = df[(df['seconds'] > (seconds_slicer - 60)) &
(df['seconds'] <= seconds_slicer)]
calc = my_function(minute_slice['input'])
output.append(calc)
如果有更简洁的方法可以做到这一点,请告诉我。谢谢!
编辑:添加示例数据和函数详细信息:
seconds input
1 1 0.000054
2 2 -0.000012
3 3 0.000000
4 4 0.000000
5 5 0.000045
def realized_volatility(series_log_return):
return np.sqrt(np.sum(series_log_return**2))
【问题讨论】:
-
查看您的函数的作用,或一些示例输入和预期输出将有助于我们了解您的问题的性质。从表面上看,它看起来很像在 pandas 中进行标准重采样,这个链接有帮助吗? Pandas Resample Apply Custom Function?
-
我试图在不将秒列转换为日期时间的情况下执行此操作(但也许这就是我应该做的)。我即将在原始帖子中添加数据样本和函数的详细信息。最初我把函数细节省略了,因为我专注于切片,不想把细节弄得乱七八糟。
标签: python numpy iteration slice