问题描述
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 (将#修改为@)