如何通过循环对DataFrame指定列中的列表型数值元素求和并生成total新列
解决方案:循环处理DataFrame列表列求和
这里有个完全贴合你需求的实现方案,用循环遍历的方式处理你的DataFrame,计算列表元素的和并生成新列:
import pandas as pd import numpy as np # 先创建和你提供的结构一致的示例DataFrame df = pd.DataFrame( {'col1': [[0, 0], [7.9, 11.06], [0.9, 4], np.nan]}, index=[0, 2, 3, 4] ) # 初始化Total列,默认值设为NaN df['Total'] = np.nan # 循环遍历每一行处理求和逻辑 for idx, row in df.iterrows(): # 先判断col1是否是有效的列表(排除NaN的情况) if not pd.isna(row['col1']) and isinstance(row['col1'], list): # 计算列表元素的和,按示例要求保留1位小数 sum_result = sum(row['col1']) df.loc[idx, 'Total'] = round(sum_result, 1) # 输出最终结果 print(df)
代码逻辑说明:
- 首先我们构建了和你给出的结构完全匹配的DataFrame,包括自定义索引和NaN值;
- 提前给
Total列设好默认NaN值,这样col1为NaN的行就不用额外处理,直接保持默认; - 用
iterrows()循环遍历每一行,这是pandas里遍历行的常用方式,能拿到每一行的索引和对应数据; - 每次循环先判断
col1是不是有效的列表,确认后就计算列表元素的和,四舍五入到1位小数(和你给出的示例结果一致),再把结果赋值给对应行的Total列。
运行这段代码后,你会得到如下格式的结果:
| Index | col1 | Total |
|---|---|---|
| 0 | [0, 0] | 0 |
| 2 | [7.9, 11.06] | 18.9 |
| 3 | [0.9, 4] | 4.9 |
| 4 | NaN | NaN |
(如果需要把0.0转为整数0,可以加一行df['Total'] = df['Total'].apply(lambda x: int(x) if pd.notna(x) and x == int(x) else x)来处理)
内容的提问来源于stack exchange,提问作者sapna Singh
相关产品推荐
相关产品推荐

