首页 > 解决方案 > 我必须将每一列存储在数据框中(8 个五分位)

问题描述

我有一个包含 4 列的数据框,对于每一列,我们必须进行分桶(将数据分布在 8 个桶中),这样应该对第一列和第二列进行分桶,以此类推,无需手动指定列名

这是我正在尝试的代码

for col in df3.columns[0:]:
cb1 = np.linspace(min(col), max(col), 11)
df3.insert(2 ,'buckets',pd.cut(col, cb1, labels=np.arange(1, 11, 1)))
print(df3[col])

这里 df3 是样本数据集

苹果橙香蕉

5 2 6

6 4 6

2 8 9

4 7 0

预期的输出是

苹果橙香蕉桶_苹果桶_橙桶_香蕉

5 2 6 1 3 2

6 4 6 1 1 4

2 8 9 2 1 8

4 7 0 5 4 1

这里的桶列是指定相对于数据的桶号

标签: pythondataframebucket

解决方案


由于输出是完全随机的,因此您的数据列和存储桶编号之间没有相关性,在这种情况下您应该单独生成存储桶。

for c in df.columns:
    df['bucket_' + c] = np.random.randint(8, size=(len(df))) + 1
df # your random bucket df. 

如果您希望存储桶大小相等:

for c in df.columns:
    arr = np.arange(8) + 1
    arr = np.repeat(arr, int(len(df))/8) # your df has to be divisible by 8
    np.random.shuffle(arr) # shuffle the array.
    df['bucket_' + c] = arr

推荐阅读