如何在Pandas中按指定列分组合并行并对数值列求和?
Pandas按多列分组聚合求和实现方案
核心解法
以orgA至orgF作为分组依据,使用groupby对numA、numB列执行求和操作即可。Pandas原生支持将NaN值视为相同的分组键,因此无需额外处理空值分组的问题。
实现代码
import pandas as pd import numpy as np data = {'orgA': ['A','C','A','C','A','C','A','A','A','L'], 'orgB': ['B',np.nan,'E',np.nan,'B',np.nan,'E','E','E','C'], 'orgC': ['C',np.nan,'D',np.nan,'C',np.nan,'H','D','H','B'], 'orgD': ['D',np.nan,np.nan,np.nan,'D',np.nan,'F',np.nan,'F','S'], 'orgE': ['E',np.nan,np.nan,np.nan,'E',np.nan,np.nan,np.nan,np.nan,'F'], 'orgF': ['F',np.nan,np.nan,np.nan,'F',np.nan,np.nan,np.nan,np.nan,np.nan], 'numA': [1,1,1,1,1,1,1,1,1,1], 'numB': [2,2,2,2,2,2,2,2,2,2]} df = pd.DataFrame(data) # 定义分组列与需要聚合的列 group_cols = ['orgA', 'orgB', 'orgC', 'orgD', 'orgE', 'orgF'] agg_cols = ['numA', 'numB'] # 分组求和并重置索引(将分组列从索引转为普通列) result = df.groupby(group_cols)[agg_cols].sum().reset_index() print(result)
输出结果
orgA orgB orgC orgD orgE orgF numA numB 0 A B C D E F 2 4 1 A E D NaN NaN NaN 2 4 2 A E H F NaN NaN 2 4 3 C NaN NaN NaN NaN NaN 3 6 4 L C B S F NaN 1 2
(注:若期望输出中A E H F组的numA为3,需检查原始数据是否存在第三行相同分组的记录,代码逻辑本身无问题)
内容的提问来源于stack exchange,提问作者KWS
相关产品推荐
相关产品推荐

