如何在Python Pandas中调整DataFrame行位置并完成数据转换?
使用Pandas转换数据格式及调整行位置的方法
一、将现有宽表转换为预期的长表格式
根据你的现有数据(宽表结构:日期为标识列,各类别为数据列)和预期输出(长表结构:日期、类别、数值三列),可以用Pandas的melt()方法快速实现转换:
示例代码
先模拟现有数据的DataFrame:
import pandas as pd data = { "日期": ["2023-01-01", "2023-01-02"], "A类": [10, 15], "B类": [20, 25], "C类": [30, 35] } df = pd.DataFrame(data)
执行格式转换:
# id_vars指定保留的标识列,var_name设置类别列名,value_name设置数值列名 df_melted = df.melt(id_vars=["日期"], var_name="类别", value_name="数值")
转换后的结果与预期格式一致:
日期 类别 数值 0 2023-01-01 A类 10 1 2023-01-02 A类 15 2 2023-01-01 B类 20 3 2023-01-02 B类 25 4 2023-01-01 C类 30 5 2023-01-02 C类 35
若需要按日期排序,可补充:
df_melted = df_melted.sort_values("日期").reset_index(drop=True)
二、调整DataFrame行位置更新数据
Pandas中调整行位置的常见操作如下:
1. 自定义行顺序排列
已知目标行的索引时,直接通过索引列表重新排列:
# 按[2,0,1,3,4,5]的索引顺序重新排列 new_order = [2, 0, 1, 3, 4, 5] df_reordered = df_melted.loc[new_order]
2. 按列值排序调整
用sort_values()根据列值排序,支持多列排序和升降序设置:
# 按"数值"降序排列 df_sorted = df_melted.sort_values("数值", ascending=False) # 按"日期"升序、"数值"降序排列 df_multi_sorted = df_melted.sort_values(["日期", "数值"], ascending=[True, False])
3. 移动指定行到特定位置
比如将某行移到开头或末尾:
# 将索引为3的行移到开头 row_to_move = df_melted.loc[3:3] df_updated = pd.concat([row_to_move, df_melted.drop(3)]).reset_index(drop=True)
4. 重置索引
调整行位置后索引可能混乱,用reset_index(drop=True)生成连续索引:
df_updated = df_updated.reset_index(drop=True)
内容的提问来源于stack exchange,提问作者hilhil
相关产品推荐
相关产品推荐

