如何基于Combi列指定值对time in minutes列求和?(含代码问题)
问题:按指定Combi值求和time in minutes列
数据表格
| Combi | Tons | width | bruttotime | time | time in minutes | total time for Combi |
|---|---|---|---|---|---|---|
| 300244871 | 23.080 | 1.544,00 | 69,98 | 05:12:30 | 70,05 | |
| 0,000 | 1.544,00 | 0,00 | 06:22:33 | 0,00 | ||
| 22.790 | 1.544,00 | 71,98 | 06:22:33 | 71,98 | ||
| 300244871 | 0,000 | 1.544,00 | 0,00 | 07:34:32 | 0,00 | |
| 300244881 | 23.080 | 1.544,00 | 69,98 | 05:12:30 | 77,05 | |
| 0,000 | 1.544,00 | 0,00 | 06:22:33 | 0,00 | ||
| 22.790 | 1.544,00 | 71,98 | 06:22:33 | 5,98 | ||
| 300244881 | 0,000 | 1.544,00 | 0,00 | 07:34:325,98 | 0,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
相关产品推荐
相关产品推荐

