gpt4 book ai didi

python - 当您的数据不在偶数时间间隔内时,是否有一种快速的方法可以在偶数时间间隔内对 Pandas Dataframe 进行滚动求和?

转载 作者:行者123 更新时间:2023-12-04 09:16:27 26 4
gpt4 key购买 nike

假设我有一个数据帧,其中索引是时间戳。但是,时间戳的间隔不均匀,所以我想让它均匀。例如,我想设置我的时间间隔,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)

最佳答案

创建一个均匀间隔的日期时间索引,将其应用于您的数据并使用均匀间隔的索引对数据框进行滚动求和。
由于这将发生在 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

关于python - 当您的数据不在偶数时间间隔内时,是否有一种快速的方法可以在偶数时间间隔内对 Pandas Dataframe 进行滚动求和?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63189849/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com