在BigQuery中实现未来6个月数据行转列及Units求和
按月份聚合Units并转置为列的实现方案
需求说明
- 针对包含
Part no.、Date、Units字段的数据集 - 以当前月份起的未来6个月作为列,统计每个部件对应月份的Units总和
- 示例数据与期望输出如下:
示例输入数据
| Part no. | Date | Units |
|---|---|---|
| 1213 | 21/9/23 | 1 |
| 1213 | 21/9/23 | 1 |
| 1213 | 21/10/23 | 1 |
| 1213 | 21/10/23 | 1 |
| 1213 | 21/11/23 | 1 |
| 1213 | 21/11/23 | 1 |
| 1213 | 21/12/23 | 1 |
| 1213 | 21/12/23 | 1 |
| 1213 | 21/12/23 | 1 |
| 1213 | 21/12/23 | 1 |
期望输出
| Part no. | 当前月份 | 当前月份+1 | 当前月份+2 | 当前月份+3 |
|---|---|---|---|---|
| 1213 | 2 | 2 | 2 | 4 |
实现方案(Python Pandas)
以下是基于Pandas的代码实现,可直接适配你的数据集:
import pandas as pd from datetime import datetime # 1. 加载数据集(替换为你的数据源,比如pd.read_csv()) data = { 'Part no.': ['1213']*10, 'Date': ['21/9/23','21/9/23','21/10/23','21/10/23','21/11/23','21/11/23','21/12/23','21/12/23','21/12/23','21/12/23'], 'Units': [1]*10 } df = pd.DataFrame(data) # 2. 解析日期字段(注意格式为日/月/年,根据实际格式调整format参数) df['Date'] = pd.to_datetime(df['Date'], format='%d/%m/%y') # 3. 提取年月周期,避免跨年月份混淆 df['Year-Month'] = df['Date'].dt.to_period('M') # 4. 定义当前月份(实际场景可替换为datetime.now().to_period('M')获取系统当前月) current_month = df['Year-Month'].min() # 示例中取数据最早月份作为当前月 # 5. 生成当前月起未来6个月的周期范围 target_months = pd.period_range(start=current_month, periods=6, freq='M') # 6. 筛选目标月份的数据 filtered_df = df[df['Year-Month'].isin(target_months)] # 7. 按部件和年月分组求和,转置为宽表 grouped_sum = filtered_df.groupby(['Part no.', 'Year-Month'])['Units'].sum().unstack() # 8. 重命名列,匹配需求的命名规则 col_names = [f'当前月份+{i}' if i > 0 else '当前月份' for i in range(len(target_months))] grouped_sum.columns = col_names # 9. 重置索引,输出最终结果 final_result = grouped_sum.reset_index() print(final_result)
关键说明
- 日期解析:需根据实际日期格式调整
pd.to_datetime的format参数,确保日期转换正确 - 当前月份定义:示例中用数据的最早月份代替,实际可改为
datetime.now().to_period('M')获取系统当前月 - 跨年处理:使用
to_period('M')生成年月周期,可自动处理跨年度的月份统计
内容的提问来源于stack exchange,提问作者vicky bundele
相关产品推荐
相关产品推荐

