如何简化Pandas中从DataFrame生成多年度FunderCode统计合并表的流程?
高效实现多年度FunderCode统计合并
你可以用pandas的**透视表(pivot_table)或者交叉表(crosstab)**直接一步完成,不用逐年筛选再合并,尤其适合多年份场景:
方法一:使用pivot_table
- 先从
OrderStartDate提取年份,生成新列Year - 按
FunderCode和Year分组计数,再转成宽表格式
# 提取年份 df['Year'] = df['OrderStartDate'].dt.year # 生成透视表,统计每个FunderCode在各年份的出现次数 result = df.pivot_table( index='FunderCode', columns='Year', values='ClientI', # 用任意非空列计数都可以 aggfunc='count', fill_value=0 # 没有数据的年份填充0 ).rename(columns=lambda x: f'Count_{x}').reset_index()
方法二:使用crosstab
交叉表更简洁,直接统计两个列的频次分布:
# 提取年份 year_col = df['OrderStartDate'].dt.year # 生成交叉表并重命名列 result = pd.crosstab( index=df['FunderCode'], columns=year_col ).rename(columns=lambda x: f'Count_{x}').reset_index()
结果展示
针对你的原始数据,两种方法都会得到如下结果:
FunderCode Count_2017 Count_2018 Count_2019 0 H2 3 0 0 1 H3 0 1 0 2 H4 0 0 1
优势说明
- 不管涉及多少年份,只需要一次操作,无需重复编写筛选、统计、合并的冗余代码
- 自动处理缺失年份的填充(通过
fill_value=0),避免合并时出现数据不匹配的问题 - 代码简洁易维护,大幅降低出错概率
内容的提问来源于stack exchange,提问作者GGT
相关产品推荐
相关产品推荐

