如何在Pandas中对重叠的3个月累计数据执行分组分位数计算?
解决重叠时间区间分组计算分位数的方案
首先确保数据中Date列是datetime类型,先完成格式转换(如果原始数据未转换):
import pandas as pd # 模拟示例数据(可替换为你的真实数据) data = pd.DataFrame({ 'Date': pd.date_range(start='2022-01-01', end='2022-05-31', freq='D'), 'Category': ['A', 'B', 'A', 'B'] * 46 + ['A'], 'Amount': pd.np.random.randint(10, 100, size=151) }) # 转换Date列为datetime类型 data['Date'] = pd.to_datetime(data['Date'])
接下来定义需要计算的重叠时间区间:
time_intervals = [ ('2022-01-01', '2022-03-31', '2022_1-3月'), ('2022-02-01', '2022-04-30', '2022_2-4月'), ('2022-03-01', '2022-05-31', '2022_3-5月') ]
遍历每个区间,筛选数据并分组计算0.9分位数,最后合并结果:
results = [] for start_date, end_date, interval_name in time_intervals: # 筛选当前时间区间内的数据 mask = (data['Date'] >= start_date) & (data['Date'] <= end_date) filtered_data = data[mask] # 按Category分组计算0.9分位数 quantile_result = filtered_data.groupby('Category')['Amount'].quantile(0.9).reset_index() # 添加区间标识列 quantile_result['Time_Interval'] = interval_name results.append(quantile_result) # 合并所有区间的计算结果 final_result = pd.concat(results, ignore_index=True) # 调整列顺序并重命名分位数列(可选) final_result = final_result[['Category', 'Time_Interval', 'Amount']].rename(columns={'Amount': '0.9_Quantile'}) print(final_result)
运行后会得到如下格式的结果:
| Category | Time_Interval | 0.9_Quantile |
|---|---|---|
| A | 2022_1-3月 | 92.0 |
| B | 2022_1-3月 | 91.0 |
| A | 2022_2-4月 | 93.0 |
| ... | ... | ... |
该方法通过手动筛选重叠区间数据,避免了resample无法处理非规则重叠区间的限制,适用于各种自定义时间区间的分组统计需求。
内容的提问来源于stack exchange,提问作者sxs
相关产品推荐
相关产品推荐

