微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

熊猫滚动强制使用偏移量

如何解决熊猫滚动强制使用偏移量

想象一下,我有一个非常大的数据框/熊猫系列,如下所示:

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 举报,一经查实,本站将立刻删除。