如何解决熊猫滚动强制使用偏移量
blockNumber_base10 address_idx
910760.8 0 36
2 2
3 4
4 5
7 3
..
894762.9 1527 2
1657 1
1776 2
1784 2
1820 9
Name: data,Length: 10000000,dtype: int64
我想执行基于偏移量的滚动均值。我们可以想象 blockNumber_base10 类似于 UNIX Timestamp。
l007p_analyzed_res_to_examine_df_grand.reset_index().groupby("address_idx").rolling(window = 100.1,on ="blockNumber_base10").mean()
错误是:
ValueError: window must be an integer
我特意使用了 100.1,因为我们想要偏移而不是固定窗口。我目前的工作已将其强制转换为某种虚构的时间戳。但它实际上需要更多的内存。从以前开始,我们可以使用 int/float 来表示时间。但是现在,我们必须使用日期时间对象...
x = range(0,6)
id = ['a','a','b','b']
time = [0,1,2,4]
df = pd.DataFrame(zip(time,id,x),columns = ['time','id','x'])
df = df.set_index(["time","id"])
df = df.sort_index()
df.reset_index().set_index("time")
[pd.timedelta(j,unit="second") for j in df.index.get_level_values(0)]
df["timedelta"] = [pd.Timestamp("21000101") + pd.timedelta(j,unit="second") for j in df.index.get_level_values(0)]
df.reset_index().set_index("timedelta").groupby("id").rolling(window="1100ms").sum()
所以基本上,即使我这样做:
l007p_analyzed_res_to_examine_df_grand["blockNumber_base10"] = [pd.Timestamp("21000101") + pd.timedelta(j,unit="second") for j in l007p_analyzed_res_to_examine_df_grand.blockNumber_base10]
这一步已经太费时间了。我希望计算 1B 行。 (这个例子只有 10M 行...)
有没有更好的解决方案?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。