You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

按条件映射计算Pandas DataFrame中指定单元格的数值总和

Pandas按条件计算指定单元格总和

问题说明

现有如下Pandas DataFrame,需按以下两个条件分别计算对应单元格的数值总和:

  • 条件1:LOC取值为8、21,且仅计算TYPE为x、y、z的列,预期结果为27
  • 条件2:LOC取值为30、16,且仅计算TYPE为x、y、z、q的列,预期结果为21

示例DataFrame构造代码:

import pandas as pd

data = {'LOC': [5, 8, 16, 21, 30, 35],
        'x': [5, 2, 3, 5, 2, 2],
        'y': [6, 3, 1, 6, 2, 1],
        'z': [7, 3, 2, 8, 3, 4],
        'q': [8, 4, 2, 9, 6, 5],
        'p': [10, 5, 3, 1, 7, 3]
       }
data_frame = pd.DataFrame(data)

解决方案

方法一:针对单个条件直接计算

条件1计算

先筛选LOC为8或21的行,再选取x、y、z列,最后求和:

# 条件1总和
cond1_sum = data_frame[data_frame['LOC'].isin([8, 21])][['x', 'y', 'z']].sum().sum()
print(cond1_sum)  # 输出27

条件2计算

同理,筛选LOC为30或16的行,选取x、y、z、q列求和:

# 条件2总和
cond2_sum = data_frame[data_frame['LOC'].isin([30, 16])][['x', 'y', 'z', 'q']].sum().sum()
print(cond2_sum)  # 输出21

方法二:封装通用函数(复用性更强)

如果需要频繁处理类似条件,可以写一个通用函数,传入LOC列表和TYPE列列表,直接返回总和:

def calculate_sum(df, loc_values, type_columns):
    # 筛选LOC符合条件的行,选取指定TYPE列,计算嵌套总和
    return df[df['LOC'].isin(loc_values)][type_columns].sum().sum()

# 调用函数计算条件1
cond1_sum = calculate_sum(data_frame, [8, 21], ['x', 'y', 'z'])
# 调用函数计算条件2
cond2_sum = calculate_sum(data_frame, [30, 16], ['x', 'y', 'z', 'q'])

print(cond1_sum)  # 27
print(cond2_sum)  # 21

代码说明

  • df['LOC'].isin(loc_values):筛选LOC列值在指定列表中的行
  • [type_columns]:选取需要计算的TYPE列(即x、y等列)
  • 第一个sum()是对每列求和,第二个sum()是把各列的和再相加,得到所有符合条件的单元格的总和

内容的提问来源于stack exchange,提问作者nkltkf

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 14:16:21