如何用Python筛选CSV特定行并计算指定列正数值的最大最小值差
需求与解决方案
需求说明
筛选CSV文件中满足ColumnA=1且ColumnC=0的行,提取这些行内ColumnB的正数值,计算该数值集合的最大值与最小值的差值。
示例CSV数据
| Column A | Column B | Column C | Column D |
|---|---|---|---|
| 1 | -99 | 0 | 0.4567 |
| 1 | -99 | 0 | 0.5678 |
| 1 | 60 | 40 | 0.123 |
| 1 | 67 | 60 | 0.2894 |
| 1 | 69 | 0 | 0.3983 |
| 1 | 70 | 0 | 0.3983 |
| 1 | 71 | 0 | 0.3983 |
| 2 | -30 | 0 | 0.3983 |
| 2 | -40 | 20 | 0.3983 |
| 2 | 45 | 30 | 0.3983 |
| 2 | 46 | 40 | 0.3983 |
原有代码(原逻辑为计算均值)
用户原本编写的循环代码用于计算不同ColumnA值对应的ColumnB均值,现需替换为最大最小值差值计算:
for u in range(1, 19): ColumnZ = df.query(f'ColumnB >0 & ColumnC == 0 & ColumnA == {u}')['ColumnB'].mean() test.loc[rowIndex, 'ColumnZ'] = ColumnZ
修改后的代码(计算最大最小值差值)
方式1:仅处理ColumnA=1的场景
如果只需要针对ColumnA=1的情况计算,直接筛选后计算即可:
# 筛选符合条件的行,提取ColumnB的正数值 filtered_data = df.query('ColumnA == 1 & ColumnC == 0 & ColumnB > 0')['ColumnB'] # 计算差值,处理空数据避免报错 if not filtered_data.empty: value_diff = filtered_data.max() - filtered_data.min() else: value_diff = None # 可根据需求设置默认值,比如0
方式2:保留原有循环逻辑(处理ColumnA=1到18)
如果需要保持循环处理ColumnA从1到18的场景,修改如下:
for u in range(1, 19): filtered_data = df.query(f'ColumnB >0 & ColumnC == 0 & ColumnA == {u}')['ColumnB'] # 计算差值,空数据时设为None或其他默认值 if not filtered_data.empty: ColumnZ = filtered_data.max() - filtered_data.min() else: ColumnZ = None test.loc[rowIndex, 'ColumnZ'] = ColumnZ
示例结果验证
根据提供的示例数据,符合条件的ColumnB正数值为69、70、71:
- 最大值:71
- 最小值:69
- 差值:71 - 69 = 2
内容的提问来源于stack exchange,提问作者Kkura
相关产品推荐
相关产品推荐

