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

如何对DataFrame数值列元素随机重排并生成多组样本

实现方案

你可以用Pandas搭配NumPy完成需求,代码会自动识别所有数值列,哪怕有上百列也不需要手动指定列名,适配性强。

完整可运行代码

import pandas as pd
import numpy as np

# ---------------------- 1. 构造原始数据(你已有df可跳过这步) ----------------------
raw_data = {
    'Name': ['John'],
    'A': [1], 'B': [2], 'C': [3], 'D': [2], 'E': [3]
}
df = pd.DataFrame(raw_data)

# ---------------------- 2. 核心逻辑 ----------------------
# 自定义生成的行数
GENERATE_ROWS = 50
# 固定列配置,若有多个固定列可改为列表,如 ['Name', 'Department']
FIXED_COLS = ['Name']
fixed_values = df[FIXED_COLS].iloc[0]
# 自动筛选所有需要打乱的数值列
shuffle_cols = [col for col in df.columns if col not in FIXED_COLS]
# 提取原始待打乱的数值序列
raw_nums = df[shuffle_cols].iloc[0].values

# 批量生成随机重排结果
shuffled_results = []
for _ in range(GENERATE_ROWS):
    # 对原始数值做无放回随机重排,完全保留原始数值的频次分布
    shuffled_line = np.random.permutation(raw_nums)
    shuffled_results.append(shuffled_line)

# 拼接为最终DataFrame
result_df = pd.DataFrame(shuffled_results, columns=shuffle_cols)
# 批量插入固定列
for col in FIXED_COLS:
    result_df.insert(0, col, fixed_values[col])

# 输出验证
print(result_df.head())

扩展说明

  • 若原始数据有多个不同Name的行,需要为每个Name单独生成重排结果,只需要对原始DataFrame按固定列分组后,循环每组执行上述核心逻辑即可
  • 代码默认保留原始数值的频次分布,比如原始数值是2个2、2个3、1个1,重排后的每一行也会严格遵循这个数量比例,和你给出的示例要求完全一致

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 16:54:04