在Pandas中,根据时间戳进行分组求和是时间序列分析中的常见操作。这涉及到将时间戳数据按照特定的时间间隔(如每天、每小时、每月等)进行分组,然后对每个时间区间内的数值进行求和。
resample
是Pandas中专门用于时间序列重采样的方法,可以方便地按照各种时间频率进行分组聚合。
import pandas as pd
# 示例数据
data = {
'timestamp': pd.to_datetime(['2023-01-01 08:00', '2023-01-01 09:30',
'2023-01-02 10:15', '2023-01-02 11:45']),
'value': [10, 20, 30, 40]
}
df = pd.DataFrame(data)
df.set_index('timestamp', inplace=True)
# 按天分组求和
daily_sum = df.resample('D').sum()
print(daily_sum)
pd.Grouper
可以与groupby
结合使用,提供更灵活的时间分组方式。
# 如果timestamp不是索引
df = pd.DataFrame(data)
# 按小时分组求和
hourly_sum = df.groupby(pd.Grouper(key='timestamp', freq='H')).sum()
print(hourly_sum)
如果需要对时间戳的特定部分(如小时、月份)进行分组,可以使用dt
访问器。
# 按月份分组求和
monthly_sum = df.groupby(df['timestamp'].dt.month).sum()
print(monthly_sum)
| 代码 | 说明 | |------|------| | 'S' | 秒 | | 'T' 或 'min' | 分钟 | | 'H' | 小时 | | 'D' | 天 | | 'W' | 周 | | 'M' | 月 | | 'Q' | 季度 | | 'A' 或 'Y' | 年 |
解决方案:
set_index
将时间戳列设为索引groupby
中使用pd.Grouper
指定时间列解决方案:
# 自定义每4小时分组
custom_sum = df.resample('4H').sum()
解决方案:
# 填充缺失时间段为0
filled_sum = df.resample('D').sum().fillna(0)
解决方案:
# 按天和类别分组求和
df.groupby([pd.Grouper(key='timestamp', freq='D'), 'category']).sum()
通过以上方法,您可以灵活地在Pandas中根据时间戳进行各种分组求和操作。
没有搜到相关的文章