如何无需虚拟列用Pandas按小时统计时间戳频率?
无需虚拟列,直接统计时间戳周期出现频率的方法
完全可以不用添加虚拟列,直接基于原始时间戳列表完成统计,给你两种实用的实现方式:
方法一:借助Series的resample+count()
先把时间戳列表转换成Pandas的datetime格式,再做成Series,接着用resample指定统计周期(比如'H'代表小时),最后调用count()就能直接得到每个周期内的时间戳数量:
import pandas as pd # 示例时间戳列表,实际替换成你的数据 timestamp_list = pd.to_datetime(["2024-05-20 08:12:00", "2024-05-20 08:45:00", "2024-05-20 09:03:00"]) # 转为Series ts_series = pd.Series(timestamp_list) # 按小时重采样并统计数量 hourly_freq = ts_series.resample('H', on=ts_series.name).count() print(hourly_freq)
如果直接用DatetimeIndex处理,代码可以简化成:
ts_index = pd.DatetimeIndex(timestamp_list) hourly_freq = ts_index.to_series().resample('H').count()
方法二:用Grouper分组统计
把时间戳存入DataFrame(不用加额外列),通过pd.Grouper按时间周期分组,再用count()统计每组的行数,也就是对应周期的出现频率:
df = pd.DataFrame({'timestamp': timestamp_list}) hourly_freq = df.groupby(pd.Grouper(key='timestamp', freq='H')).count()
不管用哪种方法,都能实现按小时、天、月等任意周期的频率统计,全程不需要添加值为1的虚拟列。
内容的提问来源于stack exchange,提问作者Dick Visser
相关产品推荐
相关产品推荐

