为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

杨__羊羊 2023-04-18 11:03:26
假设我有一个数据框,其中索引是时间戳。但是,时间戳的间隔不均匀,所以我想让它均匀。例如,我想将我的时间间隔设置为 1 分钟的时间间隔。我想对从 t0 到 t1 的所有值求和,然后求和 t1 处的值。我一直在做的方式是通过循环。首先,我创建了一个包含开始时间和结束时间的时间戳列表。然后我将我的数据帧子集化为一个小数据帧,然后对该小数据帧进行计算(在本例中为总和)。然后我将我的值保存到列表中。并重复。不幸的是,这需要很长时间。有没有更快的方法来做到这一点?我在非常小的时间范围内处理数据,所以我认为用 0 数据创建额外的行并使用内置的滚动求和函数是没有意义的......数据示例如下:2020-04-01 00:03:48.197028     12020-04-01 00:24:07.186631    112020-04-01 00:24:07.200361     52020-04-01 00:24:07.204382     12020-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 回答

?
四季花海

TA贡献1811条经验 获得超5个赞

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


查看完整回答
反对 回复 2023-04-18
  • 1 回答
  • 0 关注
  • 106 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信