基于行观测调整列顺序及数据排序的技术求助
解决方案:按指定规则排序行和列
没问题,我给你分两种常用工具的实现方案,你可以根据自己的场景选择:
Excel 操作步骤
1. 按「Total_by_hour」列降序排序数据行
- 选中所有数据行(注意不要包含最后的总计行)
- 点击顶部菜单栏的「数据」→「排序」
- 在弹出的对话框中:
- 主要关键字选择「Total_by_hour」
- 排序依据选「数值」,次序选择「降序」
- 记得勾选「数据包含标题」,避免表头被当成数据排序
- 点击确定,数据行就会按Total_by_hour从大到小排列
2. 按总计行值降序重排day1-day4列
- 先确认你的总计行位置(比如在第12行)
- 选中day1到day4的整列(包含所有数据行和总计行)
- 右键点击列标(比如列B到E)→「自定义排序」
- 点击对话框左下角的「选项」,选择「按行排序」,点击确定
- 回到排序对话框:
- 主要关键字选择你的总计行号(比如「行12」)
- 排序依据选「数值」,次序选择「降序」
- 点击确定后,day列就会按照总计行的数值从大到小排列成day3、day1、day4、day2的顺序
Python Pandas 代码实现
假设你的数据已经加载到DataFrame df 中,最后一行是总计行。
1. 按「Total_by_hour」降序排序行(排除总计行)
import pandas as pd # 分离数据行和总计行 data_rows = df.iloc[:-1] total_row = df.iloc[-1:] # 对数据行按Total_by_hour降序排序 sorted_data = data_rows.sort_values(by='Total_by_hour', ascending=False) # 合并排序后的数据行和总计行 df_sorted_rows = pd.concat([sorted_data, total_row]).reset_index(drop=True)
2. 按总计行值降序重排day1-day4列
# 定义需要排序的day列列表 day_columns = ['day1', 'day2', 'day3', 'day4'] # 根据总计行的对应值,对day列进行降序排序 sorted_day_cols = sorted(day_columns, key=lambda col: df_sorted_rows.iloc[-1][col], reverse=True) # 重新整理DataFrame的列顺序(保留其他列,比如Total_by_hour) other_columns = [col for col in df_sorted_rows.columns if col not in day_columns] final_result = df_sorted_rows[other_columns + sorted_day_cols]
执行完以上代码后,final_result就是符合你要求的数据集:行按Total_by_hour降序排列,day列按总计行的数值从大到小重排。
内容的提问来源于stack exchange,提问作者FG7
相关产品推荐
相关产品推荐

