【问题标题】:Pandas: merge two time series and get the mean values during the period when these two have overlapped time periodPandas:合并两个时间序列并在这两个时间段重叠的时间段内获取平均值
【发布时间】:2022-11-08 17:00:41
【问题描述】:

我有两个熊猫数据框如下:

ts1
Out[50]: 
                     soil_moisture_ids41  
date_time                                 
2007-01-07 05:00:00               0.1830  
2007-01-07 06:00:00               0.1825  
2007-01-07 07:00:00               0.1825  
2007-01-07 08:00:00               0.1825  
2007-01-07 09:00:00               0.1825  
...                                 ...  
2017-10-10 20:00:00               0.0650  
2017-10-10 21:00:00               0.0650  
2017-10-10 22:00:00               0.0650  
2017-10-10 23:00:00               0.0650  
2017-10-11 00:00:00               0.0650  

[94316 rows x 3 columns]

另一个是

ts2
Out[51]: 
                     soil_moisture_ids42  
date_time                                                        
2016-07-20 00:00:00                0.147  
2016-07-20 01:00:00                0.148  
2016-07-20 02:00:00                0.149  
2016-07-20 03:00:00                0.150  
2016-07-20 04:00:00                0.152  
...                                 ...  
2019-12-31 19:00:00                0.216 
2019-12-31 20:00:00                0.216 
2019-12-31 21:00:00                0.215 
2019-12-31 22:00:00                0.215 
2019-12-31 23:00:00                0.215 

[30240 rows x 3 columns]

你可以看到,从2007-01-072016-07-19,只有ts1 有数据点。从2016-07-202017-10-11 有一些重叠的时间序列。现在我想组合这两个数据框。在重叠期间,我想获得ts1ts2 的平均值。在非重叠期间(2007-01-072016-07-192017-10-122019-12-31),每个时间戳的值设置为ts1ts2 中的值。那么我该怎么做呢?

谢谢!

【问题讨论】:

    标签: pandas dataframe join time merge


    【解决方案1】:

    使用concat 和聚合mean,如果只有一个值得到相同的输出,多个得到mean。最后DatatimeIndex 也被排序:

    s = pd.concat([ts1, ts2]).groupby(level=0).mean()
    

    【讨论】:

    • 谢谢!但是“.groupby(level = 0)”是什么意思?并且(在另一种独立的情况下)我看到如果我使用.mean(),一个时间戳上的多个数据点将消失。比如说,如果我在2019-12-31 上得到 3 个数据点(只是 YYYYMMDD,不包括 HH,即不是 2019-12-31 20:00:00),那么在使用 .mean() 之后,最终结果只保留一个数据点,即这 3 个数据的平均值点...那么我该怎么做才能保留原始的 3 个数据点?谢谢!
    【解决方案2】:

    只需先存储级联序列,然后应用平均值。即merged_ts = pd.concat([ts1, ts2]) 然后mean_ts = merged_ts.group_by(level=0).mean()

    【讨论】:

      猜你喜欢
      • 2012-02-07
      • 2018-07-03
      • 1970-01-01
      • 2020-04-20
      • 2018-08-16
      • 2015-05-10
      • 1970-01-01
      • 2016-09-01
      • 1970-01-01
      相关资源
      最近更新 更多