使用R按组求和并生成年度面板数据的技术问询
解决思路与代码实现
问题核心
原始数据集包含公司名称(Name)、城市代码(Cod)、获天线安装许可年份(year_l)、当年安装数量(count),需要扩展为年度面板数据,展示每家公司在对应城市每年的累计天线总数——核心是补全每个公司-城市组合的所有年份记录,并逐年累加安装量。
原始数据集示例
Name Cod year_l count A 001 2018 5 A 001 2020 3 B 002 2019 4
目标数据集示例
Name Cod year cumulative_count A 001 2018 5 A 001 2019 5 A 001 2020 8 B 002 2018 0 B 002 2019 4 B 002 2020 4
实现步骤(以Pandas为例)
- 生成完整年份序列:先确定数据集的年份范围,为每个公司-城市组合生成该范围内的所有年份记录。
- 匹配原始数据:用左连接把原始数据的安装量匹配到对应年份,缺失年份的安装量填0。
- 计算累计值:按公司-城市分组,对安装量做逐年累加得到累计天线数。
完整代码
import pandas as pd # 加载原始数据(替换成你的数据集路径即可) df = pd.DataFrame({ 'Name': ['A', 'A', 'B'], 'Cod': ['001', '001', '002'], 'year_l': [2018, 2020, 2019], 'count': [5, 3, 4] }) # 1. 确定年份范围(可手动调整成你需要的起止年份) min_year = df['year_l'].min() max_year = df['year_l'].max() years = pd.DataFrame({'year': range(min_year, max_year + 1)}) # 2. 生成所有公司-城市-年份的完整组合 unique_groups = df[['Name', 'Cod']].drop_duplicates() full_panel = unique_groups.merge(years, how='cross') # 3. 合并原始数据,填充缺失年份的安装量为0 full_panel = full_panel.merge( df.rename(columns={'year_l': 'year'}), on=['Name', 'Cod', 'year'], how='left' ).fillna({'count': 0}) # 4. 按公司-城市分组计算累计值 full_panel['cumulative_count'] = full_panel.groupby(['Name', 'Cod'])['count'].cumsum() # 整理最终输出的列顺序 full_panel = full_panel[['Name', 'Cod', 'year', 'cumulative_count']] print(full_panel)
常见问题修正
- 如果需要扩展年份范围(比如从2017到2021),直接修改
min_year和max_year的数值即可。 - 若原始数据存在重复的公司-城市-年份记录,先做聚合处理:
df = df.groupby(['Name', 'Cod', 'year_l'])['count'].sum().reset_index()。 - 确保分组时用
['Name', 'Cod']作为键,避免不同城市或公司的累计值混淆。
内容的提问来源于stack exchange,提问作者Mateus Maciel
相关产品推荐
相关产品推荐

