如何基于列总和对表格除指定列外的列进行无名称引用排序
基于列总和排序表格列(适配任意列数)
需求说明
对表格中除“同意/不同意”列外的其他列,按列总和从小到大排序,始终保留“同意/不同意”列在最左侧,且方法需适配任意数量的列。预期排序结果:同意/不同意、问题B(总和5)、问题C(总和6)、问题A(总和9)。
通用实现方案(以Python Pandas为例)
Pandas可实现无硬编码列名的通用排序,适配任意列数:
import pandas as pd # 1. 加载表格数据(示例为模拟数据,实际可从CSV/Excel导入) data = { "同意/不同意": ["非常同意", "同意", "中立", "不同意", "非常不同意"], "问题A": [5, 6, 1, -2, -1], "问题B": [1, 3, 3, 0, -2], "问题C": [2, 2, 3, 0, -1] } df = pd.DataFrame(data) # 2. 获取除第一列外的所有目标列(无需硬编码列名) target_cols = df.columns[1:] # 3. 按列总和从小到大排序目标列 # sum()计算各列总和,argsort()获取排序后的索引,以此重排列名 sorted_target_cols = target_cols[df[target_cols].sum().argsort()] # 4. 重新排列表格列:固定第一列 + 排序后的目标列 sorted_df = df[[df.columns[0]] + sorted_target_cols.tolist()] # 输出结果 print(sorted_df)
代码解释
df.columns[1:]:自动获取除第一列外的所有列,无论列数多少都能适配df[target_cols].sum().argsort():计算目标列的总和,再获取总和从小到大的索引位置,用该索引对列名排序[[df.columns[0]] + sorted_target_cols.tolist()]:固定保留第一列,后面拼接排序后的目标列,得到最终列顺序
输出结果
| 同意/不同意 | 问题B | 问题C | 问题A |
|---|---|---|---|
| 非常同意 | 1 | 2 | 5 |
| 同意 | 3 | 2 | 6 |
| 中立 | 3 | 3 | 1 |
| 不同意 | 0 | 0 | -2 |
| 非常不同意 | -2 | -1 | -1 |
内容的提问来源于stack exchange,提问作者Marc8932
相关产品推荐
相关产品推荐

