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

如何对Pandas多层索引DataFrame的内外层索引分别独立随机打乱

多层索引内外层独立打乱解决方案

实现思路

  • 先提取所有外层索引的唯一值,完成外层索引顺序的随机打乱
  • 遍历打乱后的外层索引,逐个取出对应分组,对每个分组单独做行随机打乱(即实现内层索引独立打乱)
  • 按打乱后的外层顺序拼接所有处理后的分组,得到最终结果

完整代码示例

首先是示例DataFrame生成代码:

import pandas as pd
import numpy as np

fruits=pd.DataFrame()
fruits['month']=['jan','feb','feb','march','jan','april','april','june','march','march','june','april']
fruits['fruit']=['apple','orange','pear','orange','apple','pear','cherry','pear','orange','cherry','apple','cherry']
ind=fruits.index
ind_mnth=fruits['month'].values
fruits['price']=[30,20,40,25,30 ,45,60,45,25,55,37,60]
fruits_grp = fruits.set_index([ind_mnth, ind],drop=False)

核心实现代码:

# 1. 打乱外层索引顺序
unique_outer_index = fruits_grp.index.get_level_values(0).unique()
shuffled_outer_index = np.random.permutation(unique_outer_index)

processed_groups = []
for outer_val in shuffled_outer_index:
    # 取出当前外层索引对应的所有行,保留原多层索引结构
    current_group = fruits_grp.xs(outer_val, level=0, drop_level=False)
    # 对当前分组内部行做随机打乱(内层索引独立打乱)
    # 如需固定随机结果可添加参数 random_state=任意整数
    shuffled_group = current_group.sample(frac=1)
    processed_groups.append(shuffled_group)

# 拼接所有分组得到最终DataFrame
result_df = pd.concat(processed_groups)

效果验证

你可以输出result_df.index查看索引结构:外层索引的顺序是随机打乱的,同一个外层索引下的内层索引顺序也是随机的,不同外层的内层打乱逻辑互相独立,不会互相影响。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.11 07:09:04