首页 > 解决方案 > 我如何计算每个特定时间变量的最大最小值、平均值和标准差

问题描述

我有 30 天的温度数据和其他 5 个变量,我已经将它们拆分并作为变量获取每一天(第 1 天,第 2 天,第 3 天,.....,第 30 天),工作的第一部分是绘制单独绘制图表,然后在图表中叠加 30 天并查看行为模式,然后在第二部分中,我需要每天每 10 分钟计算一次温度变量的最大值和最小值、平均值和标准偏差,得到每天大约有 144 个值。我正在使用以下链接中的 .txt 数据: mega.nz/ #!cDQGCISJ!LUD9JhJIOVGyhmS8iyHQo6x9V9KWUdfR0_T882PAv0c每天看起来像这样:

在此处输入图像描述

而且我需要计算(T 的最小值和最大值,每 10 分钟的平均值和标准偏差,直到一天结束,并在其他 29 天中保持这种状态)我希望 Python 计算分钟并做到这一点:

在此处输入图像描述

到目前为止,我的代码如下,只有第一部分(单独绘制图形的代码和 30 天的叠加图)我需要以下帮助:

import pandas as pd
from datetime import date
import datetime as dt
import calendar
import numpy as np
import pylab as plt 
import matplotlib.ticker as ticker
import seaborn as sns

datos = pd.read_csv("Jun2019.txt", sep = ',', names=('Fecha', 'Hora', 'RADNETA', 'RADCORENT', 'RADCORSAL', 'RADINFENT', 'RADINFSAL', 'TEMP'))

datos['Hora'] = datos['Hora'].str[:9] **#Use this part to get rid of the miliseconds(mm.xxxx)**
datos['Hora']

Dia01Jun2019 = datos[datos['Fecha'] == "2019-06-01"] 

tiempo01=Dia01Jun2019['Hora']
temp01=Dia01Jun2019['TEMP']

imagen = plt.figure(figsize=(25,10))
plt.plot(tiempo01,temp01)
plt.xticks(np.arange(0, 54977, 7000)) 
plt.xlabel("Tiempo (H:M:S)(Formato 24 Horas)")
plt.ylabel("Temperatura (K)")
plt.title("Día 01 Jun 2019")
plt.show()
imagen.savefig('D1JUN2019')

代码每天都在重复,只是我没有放在这里,原因是太长了,然后覆盖部分是(感谢 Mig B 社区用户帮助我使用以下代码):

imagen = plt.figure(figsize=(25,10))

for day in [1,2,3,4,5,6,8,11,12,13,14,15,16,17,18,19,20,23,26,27,28,30]:
    dia = datos[datos['Fecha'] == "2019-06-"+(f"{day:02d}")]
    tiempo= pd.to_datetime(dia['Hora'], format=' %H:%M:%S').dt.time
    temp= dia['TEMP']
    plt.plot(tiempo, temp) #, color = 'red' )# 

plt.xlabel("Tiempo (H:M:S)(Formato 24 Horas)")
plt.ylabel("Temperatura (K)")
plt.title("Temperatura Jun 2019")
plt.show()
imagen.savefig('TEMPJUN2019')

这是到目前为止的代码,我没有计算第二部分的想法,我感谢制作第二部分的每一个帮助,为了记录循环for day in [1,2,3,4,5,6,8,11,12,13,14,15,16,17,18,19,20,23,26,27,28,30]:我省略了一些日子,因为他们有测量问题。

一些以前的值信息可能可以在我在这里制作的上一个问题中找到如何制作变量的叠加图,但是我想要制作的每个图都有不同的数据长度

也有人在这里问类似的问题,如果这有助于作为指导,对某个时间间隔的值进行分组并计算平均值 只是他每 10 分钟有一次数据,并希望每 3 小时的平均值得到一天的 8 个值,在我的情况下我每大约 2 分钟获取一次数据,每 10 分钟获取一次平均值,并获得一天的大约 144 个值。

标签: pythonpython-3.xpandasloopsstatistics

解决方案


df.iloc[[1,2,3,4,5,6,8,11,12,13,14,15,16,17,18,19,20,23,26,27,28,30],:].describe()

对于索引 [1,2,3,4,5,6,8,11,12,13,14,15,16,17,18,19,20,23,26,27,28,30]。

要将日期设置为索引:

df = df.set_index('column_name_of_your_day')

如果要对每 5 行进行切片:

for i in range(0,len(df),5):
    df.iloc[i:i+5,:].describe()

推荐阅读