使用Pandas按唯一ID计算相邻月度CSV中Entries列的环比增减百分比
环比计算实现方案
前提假设
你已完成文件读取与筛选,得到上月数据DataFrame df_prev、当月最新数据DataFrame df_curr。
核心处理逻辑
- 对两个DataFrame按
id字段做外连接,分别保留两个月的Entries字段值 - 缺失值填充:仅在当月存在的id,上月Entries填充为0;仅在上月存在的id,当月Entries填充为0
- 自定义计算规则处理环比,覆盖ID仅存在于单月的特殊场景
- 最终输出仅保留
id与对应环比结果
Pandas 代码示例
import pandas as pd # 可选步骤:若单个文件内存在同id多条数据,提前按id聚合Entries(可根据业务调整为取最新/求和等) df_prev = df_prev.groupby('id', as_index=False)['Entries'].sum() df_curr = df_curr.groupby('id', as_index=False)['Entries'].sum() # 外连接合并两个月份数据 df_merge = pd.merge( df_prev[['id', 'Entries']].rename(columns={'Entries': 'entries_last_month'}), df_curr[['id', 'Entries']].rename(columns={'Entries': 'entries_current_month'}), on='id', how='outer' ) # 填充缺失值 df_merge['entries_last_month'] = df_merge['entries_last_month'].fillna(0) df_merge['entries_current_month'] = df_merge['entries_current_month'].fillna(0) # 计算环比百分比 def calc_month_on_month(row): if row['entries_last_month'] == 0: if row['entries_current_month'] == 0: return 0.0 # 上月无对应数据,可根据业务需求调整返回值,也可直接返回float('inf') return "新增无上月基数" ratio = (row['entries_current_month'] - row['entries_last_month']) / row['entries_last_month'] * 100 return round(ratio, 2) df_merge['环比增长率(%)'] = df_merge.apply(calc_month_on_month, axis=1) # 输出最终结果 result = df_merge[['id', '环比增长率(%)']] # 可直接导出为csv:result.to_csv('entries_mom_result.csv', index=False, encoding='utf-8-sig')
特殊场景说明
- 仅在当月出现的ID:默认返回
新增无上月基数,可根据业务规则替换为100%等自定义标识 - 仅在上月出现的ID:当月Entries为0,计算结果为-100%,代表当期数据跌零
- 两个月Entries均为0的ID,返回0%
内容的提问来源于stack exchange,提问作者Baobab1988
相关产品推荐
相关产品推荐

