gpt4 book ai didi

Python pandas 模糊时间索引

转载 作者:太空宇宙 更新时间:2023-11-03 15:19:08 25 4
gpt4 key购买 nike

在这里查看我的 pandas 数据框:

                       press222
datetime
2017-03-31 14:02:04 110.854683
2017-03-31 14:02:04 110.855759
2017-03-31 14:02:04 110.855103
2017-03-31 14:02:04 110.853790
2017-03-31 14:02:05 110.854034
2017-03-31 14:02:05 110.855103
2017-03-31 14:02:05 110.854683
2017-03-31 14:02:05 110.855698
2017-03-31 14:02:05 110.853851
2017-03-31 14:02:06 110.854385
2017-03-31 14:02:06 110.853905
2017-03-31 14:02:06 110.854988
2017-03-31 14:02:06 110.854988
2017-03-31 14:02:06 110.854988

您可以看到我每秒获得多个值,但不幸的是时间戳是整秒(记录器没有吐出毫秒),这使得它在某种程度上不明确。有没有办法获得属于“同一秒”的值的平均值,因此在本例中为 14:02:04,一个为 05,一个为 06?

(实际的数据帧当然太长,无法手动完成......)

我尝试了这样的滚动平均值:

df.rolling('S').mean()

我得到了不同的值,但仍然是相同的时间列(=索引)。我想每秒只保留一行以及相应的平均值。感谢您的帮助 - 谢谢!

最佳答案

您可以在索引上 groupby 并调用 mean:

In [285]:
df.groupby(level=0).mean()

Out[285]:
press222
datetime
2017-03-31 14:02:04 110.854834
2017-03-31 14:02:05 110.854674
2017-03-31 14:02:06 110.854651

因此所有重复值都会合并为单个日期时间条目

要在读取时执行此操作,您可以分块读取并执行上述操作,但如果重复条目跨越多个 block ,您仍然需要执行上述操作,但它会压缩第一个读取的 df:

In [291]:    
import io
import pandas as pd
t="""datetime,press222
2017-03-31 14:02:04,110.854683
2017-03-31 14:02:04,110.855759
2017-03-31 14:02:04,110.855103
2017-03-31 14:02:04,110.853790
2017-03-31 14:02:05,110.854034
2017-03-31 14:02:05,110.855103
2017-03-31 14:02:05,110.854683
2017-03-31 14:02:05,110.855698
2017-03-31 14:02:05,110.853851
2017-03-31 14:02:06,110.854385
2017-03-31 14:02:06,110.853905
2017-03-31 14:02:06,110.854988
2017-03-31 14:02:06,110.854988
2017-03-31 14:02:06,110.854988"""
chunks=[]
for chunk in pd.read_csv(io.StringIO(t), parse_dates=[0], index_col=[0], chunksize=3):
chunks.append(chunk.groupby(level=0).mean())
final_df = pd.concat(chunks)
final_df

Out[291]:
press222
datetime
2017-03-31 14:02:04 110.855182
2017-03-31 14:02:04 110.853790
2017-03-31 14:02:05 110.854568
2017-03-31 14:02:05 110.854744
2017-03-31 14:02:06 110.854426
2017-03-31 14:02:06 110.854988

您可以看到我们仍然有重复的条目,但 df 比我们没有预处理时要小,因此我们仍然需要再次执行groupby:

In [292]:
final_df.groupby(level=0).mean()

Out[292]:
press222
datetime
2017-03-31 14:02:04 110.854486
2017-03-31 14:02:05 110.854656
2017-03-31 14:02:06 110.854707

关于Python pandas 模糊时间索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43653726/

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