在数据处理中,经常有高频数据转成低频,秒级数据转成分钟、小时数据等。我们将讨论以下方法:
-
使用 Pandas 的
resample
方法:-
示例:将天数据转化成月数据。
-
代码示例:
import pandas as pd import numpy as np # 创建随机成绩score数据 df = pd.DataFrame({'date': pd.date_range(start='2023-01-01', end='2023-12-31', freq='D'), 'value': range(365)}) print(df) ########## date value 0 2023-01-01 0 1 2023-01-02 1 2 2023-01-03 2 3 2023-01-04 3 4 2023-01-05 4 .. ... ... 360 2023-12-27 360 361 2023-12-28 361 362 2023-12-29 362 363 2023-12-30 363 364 2023-12-31 364 [365 rows x 2 columns] ########## # 设置索引 df.set_index('date', inplace=True) # 使用resample()方法进行重新采样 # 将每日数据转换为每月数据并计算每月的总和 monthly_data = df['value'].resample('ME').sum() print(monthly_data) ########## date 2023-01-31 465 2023-02-28 1246 2023-03-31 2294 2023-04-30 3135 2023-05-31 4185 2023-06-30 4965 2023-07-31 6076 2023-08-31 7037 2023-09-30 7725 2023-10-31 8928 2023-11-30 9555 2023-12-31 10819 Freq: ME, Name: value, dtype: int64 ########## # 将每日转成每两个月采一次样 monthly_data2 = df['value'].resample('2ME').sum() print(monthly_data2) ########## date 2023-01-31 465 2023-03-31 3540 2023-05-31 7320 2023-07-31 11041 2023-09-30 14762 2023-11-30 18483 2024-01-31 10819 Freq: 2ME, Name: value, dtype: int64 ########## # 将每月数据转换为每季度数据并计算每季度的平均值 quarterly_data = monthly_data.resample('QE').mean() print(quarterly_data) ########## date 2023-03-31 1335.000000 2023-06-30 4095.000000 2023-09-30 6946.000000 2023-12-31 9767.333333 Freq: QE-DEC, Name: value, dtype: float64 ########## # 将每季度数据转换为每年数据并计算每年的最大值 annual_data = quarterly_data.resample('YE').max() print(annual_data) ########## date 2023-12-31 9767.333333 Freq: YE-DEC, Name: value, dtype: float64 ##########
-
查看每月数据的平均值:
df['value'].resample('ME').mean()
print(df['value'].resample('ME').mean()) ########## date 2023-01-31 15.0 2023-02-28 44.5 2023-03-31 74.0 2023-04-30 104.5 2023-05-31 135.0 2023-06-30 165.5 2023-07-31 196.0 2023-08-31 227.0 2023-09-30 257.5 2023-10-31 288.0 2023-11-30 318.5 2023-12-31 349.0 Freq: ME, Name: value, dtype: float64 ##########
-