跨午夜分组数据并使用pandas执行操作



我有以下数据包含在一个DataFrame中,它是自定义类的一部分,我想计算它在夜间的统计数据。

LAeq,T  LAFmax,T  LA90,T
Start date & time                            
2021-08-18 22:00:00    71.5      90.4    49.5
2021-08-18 22:15:00    70.6      94.0    45.7
2021-08-18 22:30:00    69.3      82.2    48.3
2021-08-18 22:45:00    70.1      89.9    46.4
2021-08-18 23:00:00    68.9      82.4    46.0
...       ...     ...
2021-08-24 08:30:00    72.3      85.0    61.3
2021-08-24 08:45:00    72.9      84.6    62.2
2021-08-24 09:00:00    73.1      86.1    62.6
2021-08-24 09:15:00    72.8      86.4    61.6
2021-08-24 09:30:00    73.2      93.5    61.5

例如,我想找到每个给定夜间时段的第n个最高LAFmax T。

夜间时段通常为23:00至07:00,我已经使用resample()方法实现了我的目标,如下所示。

def compute_nth_lmax(self, n):
nth_lmax = self.df["LAFmax,T"].between_time(self._night_start, self._day_start,
include_start=True, include_end=False).resample(
rule=self._night_length, offset=pd.Timedelta(self._night_start)).apply(
lambda x: (np.sort(x))[-n] if x.size > 0 else np.nan).dropna()
return nth_lmax

问题在于,resample()假设定期重新采样,当夜间时段为8小时时,这很好,因此将24平均细分(如默认情况下的23:00到07:00),但不适用于不规则的夜间时段(例如,如果我将其扩展到22:00到07:00)。

我已经尝试过使用groupby()来完成这个,但是没有运气。

我唯一能想到的就是添加另一列,将每一行标记为"夜间1","夜间2"。等等,并按这些分组,但感觉相当混乱。

我决定采用我认为稍微不太优雅的方法,创建一个单独的列来标记夜间时段,然后再处理它们。尽管如此,我还是设法在两行代码中实现了我的目标。

self.df["Night-time indices"] = (self.df.index - pd.Timedelta(self._day_start)).date
nth_event = self.df.sort_values(by=[col], ascending=False).between_time(self._night_start, self._day_start)[
[col, period]].groupby(by=period).nth(n)
Out[43]: 
Night-time indices
2021-08-18    100.0
2021-08-19     96.9
2021-08-20     97.7
2021-08-21     95.5
2021-08-22    101.7
2021-08-23     92.7
2021-08-24     85.8
Name: LAFmax,T, dtype: float64

相关内容

  • 没有找到相关文章

最新更新