每月使用Pand平均一分钟timeseries数据集

2024-06-26 09:54:26 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个非常大的分钟时间序列数据集(3个月),格式如下

datetime,val1,val2,val3,val4,val5,val6,val7,val8,val9,val10,val11,val12
1/06/2017 0:00,0,0,0,0,0,0,0,0,0,0.011,0,0.036
1/06/2017 0:01,0,0,0,0,0,0,0,0,0,0.011,0,0.036
...
1/06/2017 23:59,0,0,0,0,0,0,0,0,0,0.011,0,0.035
2/06/2017 0:00,0,0,0,0,0,0,0,0,0,0.014,0,0.036
2/06/2017 0:01,0,0,0,0,0,0,0,0,0,0.011,0,0.036
...
2/06/2017 23:59,0,0,0,0,0,0,0,0,0,0.011,0,0.035
....
31/08/2017 0:00,0,0.2,0,0,0,0.56,0,0,0,0.014,0,0.036
31/08/2017 0:01,0,0.23,0,0,0,0,0,0,0,0.011,0,0.032
...
31/08/2017 23:59,0,0,0,0,0,0,.55,0,0,0.011,0,0.034

使用panda获得每个栏目每月平均值的最有效方法是什么? 预期产出为

month,val1,val2,val3,val4,val5,val6,val7,val8,val9,val10,val11,val12
06/2017,0,0,0,0,0,0,0,0,0,0.011,0,0.036
07/2017,0,0,0,0,0,0,0,0,0,0.014,0,0.036
08/2017,0,0,0.21,0,0,0,0,0.52,0,0.011,0,0.036

目前,我所做的是逐日读取数据集,然后得到一个累计天数的数据集,然后除以每月的天数。但这是非常低效的,需要很多时间。你知道吗


Tags: 数据时间天数val1val2val10val3val4
2条回答

首先按^{}转换列,然后按MS转换^{}对于月初,最后将DatetimeIndex的格式更改为MM/YYY^{}

df['datetime'] = pd.to_datetime(df['datetime'], format='%d/%m/%Y %H:%M')

df = df.resample('MS', on='datetime').mean()
df.index = df.index.strftime('%m/%Y')
print (df)
         val1      val2  val3  val4  val5      val6      val7  val8  val9  \
06/2017   0.0  0.000000   0.0   0.0   0.0  0.000000  0.000000   0.0   0.0   
07/2017   NaN       NaN   NaN   NaN   NaN       NaN       NaN   NaN   NaN   
08/2017   0.0  0.143333   0.0   0.0   0.0  0.186667  0.183333   0.0   0.0   

          val10  val11     val12  
06/2017  0.0115    0.0  0.035667  
07/2017     NaN    NaN       NaN  
08/2017  0.0120    0.0  0.034000  

或者通过^{}将转换后的datetimes列传递给groupby并聚合mean

df = df.groupby(df['datetime'].dt.strftime('%m/%Y')).mean()
print (df)
          val1      val2  val3  val4  val5      val6      val7  val8  val9  \
datetime                                                                     
06/2017      0  0.000000     0     0     0  0.000000  0.000000     0     0   
08/2017      0  0.143333     0     0     0  0.186667  0.183333     0     0   

           val10  val11     val12  
datetime                           
06/2017   0.0115      0  0.035667  
08/2017   0.0120      0  0.034000  

熊猫read_csvto_csv是您需要的:

df = pd.read_csv('input.csv', parse_dates=['datetime'])
df.groupby(df.datetime.dt.strftime('%m/%Y')).mean().rename_axis('month').to_csv(out, float_format='%.06f')

使用您的输入数据(从…中过滤),它提供:

month,val1,val2,val3,val4,val5,val6,val7,val8,val9,val10,val11,val12
01/2017,0,0.000000,0,0,0,0.000000,0.000000,0,0,0.011000,0,0.035667
02/2017,0,0.000000,0,0,0,0.000000,0.000000,0,0,0.012000,0,0.035667
08/2017,0,0.143333,0,0,0,0.186667,0.183333,0,0,0.012000,0,0.034000

相关问题 更多 >