如何将Pandas Series按时间间隔分箱并选取指定区间的数据?
解决方法
要提取30分钟间隔分组后的第二个区间原始数据,有两种简单可行的方式:
方法一:利用Resampler的groups属性
resample返回的对象自带groups属性,它以字典形式存储每个分组的起始时间和对应索引列表,我们可以直接提取第二个分组的索引,再从原Series中获取对应数据:
import pandas as pd data = pd.Series(data=[0,1,3,5], index=pd.to_timedelta([0, 15, 30, 45], unit='min')) # 创建resample分组对象 resampler = data.resample('30min') # 获取第二个分组的索引列表 target_indices = list(resampler.groups.values())[1] # 提取对应数据 result = data.loc[target_indices] print(result)
输出结果:
0 days 00:30:00 3 0 days 00:45:00 5 dtype: int64
方法二:用pd.cut划分区间后筛选
先手动生成30分钟间隔的时间区间,再给每个数据点标记所属区间,最后筛选目标区间的数据:
import pandas as pd data = pd.Series(data=[0,1,3,5], index=pd.to_timedelta([0, 15, 30, 45], unit='min')) # 生成30分钟间隔的区间边界 bins = pd.timedelta_range(start='0min', end='60min', freq='30min') # 为每个数据点添加区间标签 data_with_interval = data.to_frame('value') data_with_interval['interval'] = pd.cut(data_with_interval.index, bins=bins) # 筛选第二个区间的数据 result = data_with_interval[data_with_interval['interval'] == bins[1]]['value'] print(result)
输出结果和方法一一致。
内容的提问来源于stack exchange,提问作者CurlyError
相关产品推荐
相关产品推荐

