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

如何基于Combi列指定值对time in minutes列求和?(含代码问题)

问题:按指定Combi值求和time in minutes列

数据表格

CombiTonswidthbruttotimetimetime in minutestotal time for Combi
30024487123.0801.544,0069,9805:12:3070,05
0,0001.544,000,0006:22:330,00
22.7901.544,0071,9806:22:3371,98
3002448710,0001.544,000,0007:34:320,00
30024488123.0801.544,0069,9805:12:3077,05
0,0001.544,000,0006:22:330,00
22.7901.544,0071,9806:22:335,98
3002448810,0001.544,000,0007:34:325,980,00

需求说明

根据Combi列的指定值(例如300244871),对time in minutes列的所有对应值求和。其中Combi为300244871时,预期求和结果为142.03(对应70,05 + 71,98)。

尝试的错误代码

df['time in minutes'] = pd.to_numeric(df['time in minutes'].str.replace(',', '.'))
start_value = df['Combi'].min()
end_value = df['Combi'].max()
filtered_df = df[(df['Combi'] >= start_value) & (df['Combi'] <= end_value)]
sum_result = filtered_df['time in minutes'].sum()
print(f"Sum of values for {start_value} to {end_value} in 'time in minutes': {sum_result}")

问题分析与修正方案

问题点

  • 未处理Combi列的空值:表格中Combi列的空行实际属于上方最近的非空Combi值,但原代码仅筛选了Combi在min到max范围内的行,遗漏了这些空行数据。
  • 筛选逻辑错误:需求是针对单个指定Combi值求和,而非对min到max范围内所有Combi值的总和。
  • 潜在数据类型问题:Combi列可能因空值被识别为非数值类型,直接用min()/max()可能出错。

修正代码

import pandas as pd

# 处理Combi列:向下填充空值,继承上方最近的非空Combi值
df['Combi'] = df['Combi'].ffill()

# 转换time in minutes列的格式:逗号替换为点,转为数值类型
df['time in minutes'] = pd.to_numeric(df['time in minutes'].str.replace(',', '.'))

# 指定要求和的Combi值
target_combi = 300244871

# 筛选对应Combi的行并求和
sum_result = df[df['Combi'] == target_combi]['time in minutes'].sum()

# 将结果填入total time for Combi列
df.loc[df['Combi'] == target_combi, 'total time for Combi'] = sum_result

print(f"Sum of 'time in minutes' for Combi {target_combi}: {sum_result}")

代码说明

  • ffill():向下填充Combi列的空值,确保空行对应正确的Combi分组。
  • 精准筛选目标Combi值,而非范围筛选,完全匹配需求。
  • 同步更新表格中的total time for Combi列,直观展示计算结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 23:55:55