当您的数据不在偶数时间间隔内时,是不是有一种快速方法可以在偶数时间间隔内对 Pandas Dataframe 进行滚动求和?
Posted
技术标签:
【中文标题】当您的数据不在偶数时间间隔内时,是不是有一种快速方法可以在偶数时间间隔内对 Pandas Dataframe 进行滚动求和?【英文标题】:Is there a fast way to do a rolling sum of Pandas Dataframe at even time intervals when your data is not in even time interval?当您的数据不在偶数时间间隔内时,是否有一种快速方法可以在偶数时间间隔内对 Pandas Dataframe 进行滚动求和? 【发布时间】:2020-11-21 04:23:58 【问题描述】:假设我有一个数据框,其中索引是时间戳。但是,时间戳的间隔不均匀,所以我想让它均匀。例如,我想让我的时间间隔为 1 分钟。我想对从 t0 到 t1 的所有值求和,并将其求和为 t1 处的值。
我一直这样做的方式是通过循环。首先,我创建一个包含开始时间和结束时间的时间戳列表。然后我将我的数据框分成一个小数据框,然后对那个小数据框进行计算(在本例中为总和)。然后我将我的值保存到一个列表中。然后重复。
不幸的是,这需要很长时间。
有没有更快的方法来做到这一点?我正在处理非常小的时间范围内的数据,所以我认为用 0 数据创建额外的行并使用内置的滚动求和函数是没有意义的......
数据示例如下:
2020-04-01 00:03:48.197028 1
2020-04-01 00:24:07.186631 11
2020-04-01 00:24:07.200361 5
2020-04-01 00:24:07.204382 1
2020-04-01 00:24:07.208525 13
我想把它转换成类似的东西:
2020-04-01 00:24:00.000000 sum(23:59 to 24:00)
2020-04-01 00:24:01.000000 sum(24:00 to 24:01)
2020-04-01 00:24:02.000000 sum(24:01 to 24:02)
2020-04-01 00:24:03.000000 sum(24:02 to 24:03)
2020-04-01 00:24:04.000000 sum(24:03 to 24:04)
【问题讨论】:
发布您的数据框以及您尝试了什么 你想要的输出是什么 我刚刚更新了它。现在我只是使用开始和结束时间对我的数据框进行子集化,进行计算,然后将其存储到列表中。我正在寻找一种更有效的做事方式——如果有的话。 【参考方案1】:创建一个均匀间隔的日期时间索引,将其应用于您的数据,并使用均匀间隔的索引对数据框进行滚动求和。 由于这将在 numpy/pandas 中发生,因此它比对数据执行 Python 循环要快得多。
使用示例中的数据并假设毫秒间隔:
df = """2020-04-01 00:03:48.197028\t1
2020-04-01 00:24:07.186631\t11
2020-04-01 00:24:07.200361\t5
2020-04-01 00:24:07.204382\t1
2020-04-01 00:24:07.208525\t13"""
# Reading the sample dataframe
from io import StringIO
mfile = StringIO(df)
adf = pd.read_csv(mfile, sep="\t")
adf.columns = ['mtimestamp', 'mnumber']
adf.mtimestamp = pd.to_datetime(adf.mtimestamp)
# Creating a proper datetime index
adf = adf.set_index(pd.DatetimeIndex(adf['mtimestamp']))
adf = adf.drop(columns='mtimestamp')
# Resampling and summing
adf.resample('1ms').sum()
产量
mnumber
mtimestamp
2020-04-01 00:24:07.186 11
2020-04-01 00:24:07.187 0
2020-04-01 00:24:07.188 0
【讨论】:
好的,我试试。我想由于规模太小,我的数据框会太大,但我想我还没有测试过。每秒钟,我将创建 100 万行。 哇,真快。我想知道我还能用重新采样的对象做什么...谢谢!以上是关于当您的数据不在偶数时间间隔内时,是不是有一种快速方法可以在偶数时间间隔内对 Pandas Dataframe 进行滚动求和?的主要内容,如果未能解决你的问题,请参考以下文章
当您使用 Python 的 Paramiko 库进行 SSH 并从远程机器的 CLI 获取输出时,是不是有一种简单的方法可以消除垃圾值?
当您使用 Python 的 Paramiko 库进行 SSH 并从远程机器的 CLI 获取输出时,是不是有一种简单的方法可以消除垃圾值?
当您使用 Python 的 Paramiko 库进行 SSH 并从远程机器的 CLI 获取输出时,是不是有一种简单的方法可以消除垃圾值?
当您使用 Python 的 Paramiko 库进行 SSH 并从远程机器的 CLI 获取输出时,是不是有一种简单的方法可以消除垃圾值?