Pandas 时间序列:计算每晚的平均值(晚上 11 点到早上 6 点之间)
Pandas timeseries : Compute the average each night (between 11 pm and 6 am)
我的数据是这样的:
datetime kwh temperature
2021-03-01 23:00:00+01:00 1.276584 8.000000
2021-03-01 23:30:00+01:00 0.833173 8.000000
2021-03-02 00:00:00+01:00 1.480995 7.000000
2021-03-02 00:30:00+01:00 1.094157 8.000000
2021-03-02 01:00:00+01:00 1.221725 7.000000
2021-03-02 01:30:00+01:00 0.893175 6.000000
2021-03-02 02:00:00+01:00 0.663352 7.000000
2021-03-02 02:30:00+01:00 0.984540 6.500000
2021-03-02 03:00:00+01:00 1.332855 6.000000
2021-03-02 03:30:00+01:00 1.108477 6.000000
2021-03-02 04:00:00+01:00 1.219103 6.000000
2021-03-02 04:30:00+01:00 1.455885 5.000000
2021-03-02 05:00:00+01:00 1.758719 4.000000
2021-03-02 05:30:00+01:00 1.679657 4.000000
2021-03-02 23:00:00+01:00 2.482981 9.000000
2021-03-02 23:30:00+01:00 0.830652 8.000000
2021-03-03 00:00:00+01:00 0.673739 10.000000
2021-03-03 00:30:00+01:00 0.452588 10.000000
2021-03-03 01:00:00+01:00 0.790415 9.000000
...
我想在夜间汇总数据并计算 kwh 和温度的 sum() 和 mean()。
夜晚开始于23:00,结束于6:00(排除)。
输出必须是一个新的数据框,其中每一行代表一个晚上:
night kwh_sum kwh_mean temperature_mean
2022-02-28 7.8 1.2 5.3
2022-03-01 10.5 2.3 6.7
2022-03-02 3.2 0.2 7.0
...
这是一种将一天的最后一个小时 D
和第二天的接下来的 6 小时 (D+1
) 一起计算在 night = D
中的方法:
out = (
df
.assign(night=(df['datetime'] - pd.Timedelta('23h')).dt.tz_convert(None))
.query('night.dt.hour < 7')
.groupby(pd.Grouper(freq='D', key='night'))
.agg({'kwh':[sum, 'mean'], 'temperature': ['mean']})
)
out.columns = ['_'.join(levels) for levels in out.columns]
关于您的数据样本:
kwh_sum kwh_mean temperature_mean
night
2021-03-01 14.892640 1.241053 6.041667
2021-03-02 1.916742 0.638914 9.666667
我的数据是这样的:
datetime kwh temperature
2021-03-01 23:00:00+01:00 1.276584 8.000000
2021-03-01 23:30:00+01:00 0.833173 8.000000
2021-03-02 00:00:00+01:00 1.480995 7.000000
2021-03-02 00:30:00+01:00 1.094157 8.000000
2021-03-02 01:00:00+01:00 1.221725 7.000000
2021-03-02 01:30:00+01:00 0.893175 6.000000
2021-03-02 02:00:00+01:00 0.663352 7.000000
2021-03-02 02:30:00+01:00 0.984540 6.500000
2021-03-02 03:00:00+01:00 1.332855 6.000000
2021-03-02 03:30:00+01:00 1.108477 6.000000
2021-03-02 04:00:00+01:00 1.219103 6.000000
2021-03-02 04:30:00+01:00 1.455885 5.000000
2021-03-02 05:00:00+01:00 1.758719 4.000000
2021-03-02 05:30:00+01:00 1.679657 4.000000
2021-03-02 23:00:00+01:00 2.482981 9.000000
2021-03-02 23:30:00+01:00 0.830652 8.000000
2021-03-03 00:00:00+01:00 0.673739 10.000000
2021-03-03 00:30:00+01:00 0.452588 10.000000
2021-03-03 01:00:00+01:00 0.790415 9.000000
...
我想在夜间汇总数据并计算 kwh 和温度的 sum() 和 mean()。
夜晚开始于23:00,结束于6:00(排除)。
输出必须是一个新的数据框,其中每一行代表一个晚上:
night kwh_sum kwh_mean temperature_mean
2022-02-28 7.8 1.2 5.3
2022-03-01 10.5 2.3 6.7
2022-03-02 3.2 0.2 7.0
...
这是一种将一天的最后一个小时 D
和第二天的接下来的 6 小时 (D+1
) 一起计算在 night = D
中的方法:
out = (
df
.assign(night=(df['datetime'] - pd.Timedelta('23h')).dt.tz_convert(None))
.query('night.dt.hour < 7')
.groupby(pd.Grouper(freq='D', key='night'))
.agg({'kwh':[sum, 'mean'], 'temperature': ['mean']})
)
out.columns = ['_'.join(levels) for levels in out.columns]
关于您的数据样本:
kwh_sum kwh_mean temperature_mean
night
2021-03-01 14.892640 1.241053 6.041667
2021-03-02 1.916742 0.638914 9.666667