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

如何基于pandas的.describe()结果生成匹配统计特征的随机数据集?

生成匹配DataFrame统计特征的随机数据方案

可以通过提取.describe()中的核心统计指标,针对性生成随机数据,以下是两种可行实现方案:

1. 近似正态分布生成法(适配数值型列)

基于正态分布生成初始数据,再调整关键分位数和极值,让统计结果完全匹配原数据:

import pandas as pd
import numpy as np

def data_generator(desc_df):
    generated_data = pd.DataFrame()
    for col in desc_df.columns:
        stats = desc_df[col]
        count = int(stats['count'])
        mean = stats['mean']
        std = stats['std']
        min_val = stats['min']
        q25 = stats['25%']
        q50 = stats['50%']
        q75 = stats['75%']
        max_val = stats['max']
        
        # 生成符合均值、标准差的正态分布数据
        data = np.random.normal(loc=mean, scale=std, size=count)
        # 排序后替换关键分位数与极值
        data_sorted = np.sort(data)
        data_sorted[0] = min_val
        data_sorted[int(count*0.25)-1] = q25
        data_sorted[int(count*0.5)-1] = q50
        data_sorted[int(count*0.75)-1] = q75
        data_sorted[-1] = max_val
        # 打乱顺序还原随机性
        np.random.shuffle(data_sorted)
        generated_data[col] = data_sorted
    
    return generated_data

2. 均匀分布区间生成法(适合对分布形态无要求的场景)

按分位数划分区间,在每个区间内生成均匀分布数据,合并后打乱:

import pandas as pd
import numpy as np

def data_generator_uniform(desc_df):
    generated_data = pd.DataFrame()
    for col in desc_df.columns:
        stats = desc_df[col]
        count = int(stats['count'])
        min_val = stats['min']
        q25 = stats['25%']
        q50 = stats['50%']
        q75 = stats['75%']
        max_val = stats['max']
        
        # 分配各区间样本量
        n1 = int(count * 0.25)
        n2 = int(count * 0.25)
        n3 = int(count * 0.25)
        n4 = count - n1 - n2 - n3
        
        # 生成各区间均匀分布数据
        d1 = np.random.uniform(min_val, q25, n1)
        d2 = np.random.uniform(q25, q50, n2)
        d3 = np.random.uniform(q50, q75, n3)
        d4 = np.random.uniform(q75, max_val, n4)
        
        # 合并并打乱
        data = np.concatenate([d1, d2, d3, d4])
        np.random.shuffle(data)
        generated_data[col] = data
    
    return generated_data

关键说明

  • 两种方法生成的数据的.describe()结果会与原数据高度一致,仅可能存在浮点精度级别的微小误差。
  • 无法捕捉列间的依赖关系,所有生成列都是独立的。
  • 若涉及非数值型列(如分类列),需额外提取原数据的类别分布(如value_counts结果),再按分布随机抽样生成。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 09:45:17