Python DataFrame求和异常排查:SQLite导入数据计算错误
问题定位与修正方案
1. System列填充逻辑错误
你当前的代码存在两处赋值错误,导致system列没有正确用对应行的iccid填充:
- 第一处代码使用了
.iloc[0],会把所有system == 'Nicht benannt!'的行都替换成第一行匹配的iccid,而非当前行的iccid; - 第二处代码结尾只写了
.iloc(未指定索引),这会返回整个Series,赋值逻辑完全错误。
修正后的填充代码:
# 用对应行的iccid填充空或指定值的system列 df.loc[df['system'].isin(['Nicht benannt!', '']), 'system'] = df['iccid']
2. 分组求和的潜在问题
你的分组求和代码groupby('system').sum(numeric_only=False)存在两个风险:
numeric_only=False会尝试对非数值列(如iccid、last_updated)执行求和操作,这会导致非预期的字符串拼接或错误;- 由于之前
system列填充错误,可能导致多个不同iccid的行被分到同一个system组下,最终求和时把无关行的日期列数值累加,这就是你例子中总用量远大于实际值的核心原因。
如果需要按system分组统计总用量,修正后的分组求和代码:
# 仅对日期列(数值型)求和 grouped = df.groupby('system')[data_columns].sum() # 添加data_usage列,为每组日期列的总和 grouped['data_usage'] = grouped.sum(axis=1)
3. 行级data_usage的正确写法
如果需求是为每一行计算日期列的总和并生成data_usage列,无需分组,直接用:
df['data_usage'] = df[data_columns].sum(axis=1)
内容的提问来源于stack exchange,提问作者NoirPi
相关产品推荐
相关产品推荐

