细分具有正态分布的数值向量

数据挖掘 Python 统计数据 数据清理 正常化
2022-02-18 11:40:33

我有一个价格值的数字数组。我想对这个参数进行分类,所以我想创建一定数量的具有相同粒度的类。我想创建一个通用函数,给定数组和类数,我希望它自动返回这些类的价格区间。目前这是我的价格属性:

df_cleaned.price.describe()
>>>
count    122668.000000
mean      11253.349594
std        7856.513917
min        1010.000000
25%        4995.000000
50%        8995.000000
75%       15965.000000
max       34991.000000
Name: price, dtype: float64

我手动创建了一个函数来创建 6 个类,它看起来像这样:

def normalize_price(df): 
    cond = [
        (df['price'] >= 1000) & (df['price'] <= 4999),
        (df['price'] >= 5000) & (df['price'] <= 8999),
        (df['price'] >= 9000) & (df['price'] <= 15999),
        (df['price'] >= 16000) & (df['price'] <= 24999), 
        (df['price'] >= 25000) & (df['price'] <= 34000),
        (df['price'] >= 34001) & (df['price'] <= 40000) 
    ]

    choice = [
        1000,
        5000,
        9000,
        16000,
        25000,
        35000,
    ]

    df['price'] = np.select(cond, choice, df['price'])
    return df

谁能帮我即兴发挥这个功能?请谢谢

1个回答

您似乎在描述cutpandas中的方法(文档)

如果您想将数据框分成n大小相等的 bin 或手动指定范围,此方法完全符合您的要求。

例子:

df = pd.DataFrame(np.array([10, 50, 99, 140, 250, 300, 450, 499]), columns=['price'])

bins = pd.IntervalIndex.from_tuples([(0, 100), (100, 300), (300, 500)])
df['price'] = pd.cut(df['price'], bins)

输出:

输出

您可以简单地指定所需的箱数:

df = pd.DataFrame(np.array([10, 50, 99, 140, 250, 300, 450, 499]), columns=['price'])

df['price'] = pd.cut(df['price'], bins=3)

输出:

输出

我希望这有助于改进您的代码。