Pandas简便实现同类别列求和:按大洲汇总产品销售占比
按大洲汇总产品销售占比的实现方案
核心实现思路
利用pandas groupby 支持按轴映射直接分组的特性,直接对销售表的国家列按所属大洲分组聚合,无需多次转置、关联操作,代码简洁且性能更高。
代码实现
import pandas as pd # 原始业务数据(示例) df = pd.DataFrame({"fr": [.2, .1, .3], "ge": [.2, .2, .2], "uk": [.2, .3, .2], "us": [.2, .2, .1], "br": [.2, .2, .2]}) country = pd.DataFrame({"continent": ["Europe", "Europe", "Europe", "Europe", "Europe", "Americas", "Americas", "Americas", "Asia", "Asia"], "country": ["fr", "ge", "uk", "es", "pt", "us", "br", "ca", "cn", "jp"]}) # 1. 构造国家→大洲的映射字典 country_continent_map = country.set_index('country')['continent'].to_dict() # 2. 对销售表列按大洲分组求和,直接得到各产品的大洲汇总占比 continent_result = df.groupby(country_continent_map, axis=1).sum()
方案优势
- 代码极简,核心逻辑仅2行,可读性强
- 性能适配百万级行的业务场景:仅对列维度(国家数量,通常最多数百个)做分组计算,行维度不需要做任何转换操作,运算开销远低于转置+合并的方案
- 结果自动保留原始产品的行顺序,无需额外做数据对齐
异常场景适配
如果销售表中存在部分国家不在大洲映射表中,可通过以下代码将这些国家归类为Other分类,避免数据丢失:
# 生成带默认分类的分组key group_key = df.columns.map(country_continent_map).fillna('Other') continent_result = df.groupby(group_key, axis=1).sum()
内容的提问来源于stack exchange,提问作者Vidac
相关产品推荐
相关产品推荐

