当您的数据不在偶数时间间隔时,是否有一种快速的方法可以在偶数时间间隔

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


杨__羊羊
浏览 170回答 1
1回答

四季花海

创建一个均匀间隔的日期时间索引,将其应用于您的数据,并使用均匀间隔的索引对数据框进行滚动求和。由于这将在 numpy/pandas 中发生,因此它比对数据进行 Python 循环要快得多。使用示例中的数据并假设毫秒间隔:df = """2020-04-01 00:03:48.197028\t12020-04-01 00:24:07.186631\t112020-04-01 00:24:07.200361\t52020-04-01 00:24:07.204382\t12020-04-01 00:24:07.208525\t13"""# Reading the sample dataframefrom io import StringIOmfile = StringIO(df)adf = pd.read_csv(mfile, sep="\t")adf.columns =  ['mtimestamp', 'mnumber']adf.mtimestamp = pd.to_datetime(adf.mtimestamp)# Creating a proper datetime indexadf = adf.set_index(pd.DatetimeIndex(adf['mtimestamp']))adf = adf.drop(columns='mtimestamp')# Resampling and summingadf.resample('1ms').sum()产量                        mnumbermtimestamp  2020-04-01 00:24:07.186 112020-04-01 00:24:07.187 02020-04-01 00:24:07.188 0
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python