You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

调整Pandas DataFrame的索引顺序及对应行的排列

解决Pandas DataFrame行顺序调整与对角线置NaN问题

1. 调整行顺序(将最后一行移至第一行)

你之前用reindex未达到预期,是因为手动指定的索引列表写法不够灵活,或与原DataFrame索引匹配度有问题。更通用的动态生成新索引方式如下:

# 生成新索引:把最后一个索引放在最前面,其余保持原顺序
new_index = [df.index[-1]] + df.index[:-1].tolist()
# 重新索引,此时行顺序会跟随索引同步调整
df = df.reindex(new_index)

如果你的索引是固定不变的,也可以直接手动写入正确的索引列表,但动态生成的方式更适配索引可能变化的场景。

2. 将对角线位置设为NaN

借助numpy的矩阵操作可快速完成,无需逐行循环:

import numpy as np

# 生成与DataFrame形状一致的布尔矩阵,对角线为True,其余为False
mask = np.eye(df.shape[0], dtype=bool)
# 将对角线位置的值替换为NaN
df = df.mask(mask)

也可以用更简洁的一行写法:

df = df.where(np.eye(df.shape[0]) != 1, np.nan)

完整示例

将两步操作结合的完整代码:

import pandas as pd
import numpy as np

# 假设你的目标DataFrame为df
# 调整行顺序
new_index = [df.index[-1]] + df.index[:-1].tolist()
df = df.reindex(new_index)

# 对角线置为NaN
df = df.mask(np.eye(df.shape[0], dtype=bool))

内容的提问来源于stack exchange,提问作者amiref

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 18:05:19