基于指定列值合并DataFrame行并求和的通用方法
解决方案:合并指定Col2值的行并按分组列聚合数值列
解决思路
先将Col2中值为2的行替换为1,保留其他值不变;再以所有分组列(如Col1及其他同类型列)+ 处理后的Col2作为分组依据,对所有数值列执行求和操作。这个逻辑能直接适配多分组列、多数值列的通用场景,避免复杂的条件分组问题。
代码实现
假设你的DataFrame名为df,以下是可直接复用的代码:
import pandas as pd # 示例输入数据(可替换为你的真实数据) df = pd.DataFrame({ 'Col1': ['A', 'A', 'B', 'B', 'B'], 'Col2': [1, 2, 1, 2, 3], 'Value': [1, 1, 2, 2, 3], # 可添加更多分组列/数值列测试通用性 'Col3': ['X', 'X', 'Y', 'Y', 'Y'], 'Value2': [5, 5, 6, 6, 7] }) # 步骤1:统一Col2取值——将2替换为1,其余值保留 df['Col2'] = df['Col2'].replace(2, 1) # 步骤2:定义分组列(所有类似Col1的分组维度) # 方式1:自动排除数值列,适用数值列明确的场景 numeric_cols = ['Value', 'Value2'] # 替换为你的所有数值列名 group_cols = [col for col in df.columns if col not in numeric_cols] # 方式2:手动指定分组列,更精准可控 # group_cols = ['Col1', 'Col3', 'Col2'] # 步骤3:分组求和,as_index=False保留原始列结构 result_df = df.groupby(group_cols, as_index=False).sum() print(result_df)
示例输出
针对你提供的基础输入,运行后输出为:
Col1 Col2 Value 0 A 1 2 1 B 1 4 2 B 3 3
若添加了额外的分组列和数值列,会自动适配聚合逻辑,输出示例:
Col1 Col3 Col2 Value Value2 0 A X 1 2 10 1 B Y 1 4 12 2 B Y 3 3 7
方案通用性说明
- 多分组列适配:无论有多少个类似Col1的分组维度,只需将其加入
group_cols即可,聚合逻辑无需调整。 - 多数值列适配:
groupby().sum()会自动对所有非分组列的数值型列求和,无需逐个指定数值列。 - 逻辑简洁:先统一目标列取值再分组,避开了复杂的条件分组判断,解决你之前用groupby未成功的问题。
内容的提问来源于stack exchange,提问作者T C Molenaar
相关产品推荐
相关产品推荐

