gpt4 book ai didi

python - 在午夜 00 点重新采样 - 计算最小值、最大值平均值 - 自定义标签

转载 作者:行者123 更新时间:2023-12-01 02:23:59 25 4
gpt4 key购买 nike

我是 Pandas 新手......我找不到解决这个简单问题的方法。我该怎么办

  • 获取[22点到第二天06点]之间的数据,包括在内,
  • 将它们计算为 count-min-max-mean,
  • 每天使用自定义标签对 Dataframe 中的结果进行重新采样,例如 night #1 2017-10-12 22h-06h night #2 2017-10-13 22h-06h等等?

数据来自 csv 文件,该文件以每分钟 1 次的速率来自温度探头,已排序,但开始和结束并不总是干净的,记录速率也不总是干净的。有时从 21:13:00 开始,频率为每分钟 5 次。因此,我尝试处理日期,而不计算行数。

您可以在下面找到一个模拟问题的小设置(我使用递增的数字而不是 °C 值来检查计算后的平均值):

import pandas as pd
import datetime as dt
import numpy as np

index = pd.date_range('01/11/2017 21:00:00', periods=10000, freq='min')
df = pd.DataFrame(list(range(10000)), columns=['T1'], index=index)
df.index.name='Datetime'
#df

我可以使用 Between_time 提取 22 点到 06 点的数据

df_light = df.between_time('22:00','06:00')
#print(df_light.to_string()) #Useful to see the whole list
df_light.head()

T1
Datetime
2017-01-11 22:00:00 60
2017-01-11 22:01:00 61
2017-01-11 22:02:00 62
2017-01-11 22:03:00 63
2017-01-11 22:04:00 64

并使用 resample().agg()

result = df_light.resample('D', base=0).agg(['count','min','max','mean']).round(2)
result.head()

T1
count min max mean
Datetime
2017-01-11 120 60 179 119.50
2017-01-12 481 180 1619 659.25
2017-01-13 481 1620 3059 2099.25
2017-01-14 481 3060 4499 3539.25
2017-01-15 481 4500 5939 4979.25

第一个问题

resample 计算当天的所有数据,即 [00h01..06h 和 22h..23h59],而我希望它计算从一天结束到第二天早上的数据天,即[第二天的 22 点..06 点]。
此外,我找不到一种方法使两者都具有包容性。

我使用 base 参数和 close : {‘right’, ‘left’} 进行搜索,但没有找到任何令人信服的内容。

第二个问题

我尝试制作带有递增数字的自定义标签,以查看有多少个夜晚,但我找不到一种方法来在夜晚之后制作递增的数字(#1、#2、#3 等)

result.index = result.index.strftime('night %Y/%m/%d 22h-06h')
result.head()

T1
count min max mean
night 2017/01/11 22h-06h 120 60 179 119.50
night 2017/01/12 22h-06h 481 180 1619 659.25
night 2017/01/13 22h-06h 481 1620 3059 2099.25
night 2017/01/14 22h-06h 481 3060 4499 3539.25
night 2017/01/15 22h-06h 481 4500 5939 4979.25

..如果你认为你可以帮助我解决这两个问题..欢迎你!非常感谢。

最佳答案

第一个问题的解决方案:

将基数与时间间隔的开始(22:00)匹配,对于间隔,每一秒都包含有值(value)的聚合,其他都是 NaN,因此使用 dropna()

result = (
df_light
.resample('12H', base=22)
.agg(['count','min','max','mean'])
.dropna()
.round(2)
)
result.head()

T1
count min max mean
Datetime
2017-01-11 22:00:00 481 60.0 540.0 300.0
2017-01-12 22:00:00 481 1500.0 1980.0 1740.0
2017-01-13 22:00:00 481 2940.0 3420.0 3180.0
2017-01-14 22:00:00 481 4380.0 4860.0 4620.0
2017-01-15 22:00:00 481 5820.0 6300.0 6060.0

第二个问题的解决方案(稍微复杂一些):

s1 = pd.Series(result.index.strftime('night #{} %Y/%m/%d 22h-06h'))
s2 = pd.Series(range(len(s1))).map(str)
df = pd.concat([s1, s2], axis=1)
new_index = df.apply(lambda x: x[0].format(x[1]), axis=1)

result.index = new_index
result.head()

T1
count min max mean
night #0 2017/01/11 22h-06h 481 60.0 540.0 300.0
night #1 2017/01/12 22h-06h 481 1500.0 1980.0 1740.0
night #2 2017/01/13 22h-06h 481 2940.0 3420.0 3180.0
night #3 2017/01/14 22h-06h 481 4380.0 4860.0 4620.0
night #4 2017/01/15 22h-06h 481 5820.0 6300.0 6060.0

您可以尝试调整新索引的格式,例如使用 range(1, len(s1) + 1) 进行正确计数。

关于python - 在午夜 00 点重新采样 - 计算最小值、最大值平均值 - 自定义标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47600508/

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