如何在不引用列名的前提下,按条件转换表格非指定列数值为负数
问题描述
需要对表格数据执行以下转换:当"Agree, Disagree"列的值为"Disagree"或"Strongly disagree"时,将该行中除该列外的所有数值列转换为负数,且操作过程中不得引用具体数值列的列名。
原始数据
| Agree, Disagree | Question A | Question B | Question C |
|---|---|---|---|
| Strongly agree | 1 | 1 | 2 |
| Agree | 1 | 3 | 0 |
| Neutral | 1 | 0 | 3 |
| Disagree | 2 | 0 | 0 |
| Strongly disagree | 1 | 2 | 1 |
预期转换结果
| Agree, Disagree | Question A | Question B | Question C |
|---|---|---|---|
| Strongly agree | 1 | 1 | 2 |
| Agree | 1 | 3 | 0 |
| Neutral | 1 | 0 | 3 |
| Disagree | -2 | 0 | 0 |
| Strongly disagree | -1 | -2 | -1 |
实现方案(Python pandas)
核心逻辑
- 动态定位"Agree, Disagree"列,自动识别所有其他数值列,无需硬编码列名
- 筛选出符合转换条件的行(值为"Disagree"或"Strongly disagree")
- 对筛选出的行的非目标列数值乘以-1完成转换
代码示例
import pandas as pd # 构造数据(实际场景可从CSV/Excel等文件读取) data = { "Agree, Disagree": ["Strongly agree", "Agree", "Neutral", "Disagree", "Strongly disagree"], "Question A": [1, 1, 1, 2, 1], "Question B": [1, 3, 0, 0, 2], "Question C": [2, 0, 3, 0, 1] } df = pd.DataFrame(data) # 动态获取目标列和非目标列 target_col = df.columns[df.columns == "Agree, Disagree"] non_target_cols = df.columns.difference(target_col) # 生成转换条件掩码 convert_mask = df[target_col].isin(["Disagree", "Strongly disagree"]).values.flatten() # 执行数值转换 df.loc[convert_mask, non_target_cols] *= -1 # 输出结果 print(df)
代码说明
df.columns.difference(target_col):自动获取除目标列外的所有列,避免硬编码列名isin(["Disagree", "Strongly disagree"]):精准筛选需要转换的行loc[convert_mask, non_target_cols] *= -1:仅对符合条件的行的指定列执行负数转换,不影响其他行数据
内容的提问来源于stack exchange,提问作者Marc8932
相关产品推荐
相关产品推荐

