мне нужно объединить каждый столбец в фрейм данных (8 квинтилей) - PullRequest
0 голосов
/ 25 октября 2018

у меня есть фрейм данных, который содержит 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

ожидаемый результат -

яблочно-банановый банан bucket_apple bucket_orange bucket_banana

5 2 6 1 3 2

6 4 6 1 1 4

2 8 9 2 1 8

4 7 0 5 4 1

здесь столбец корзины указывает номер корзины по отношению к данным

1 Ответ

0 голосов
/ 25 октября 2018

Поскольку выходные данные являются абсолютно случайными, нет никакой корреляции между столбцами данных и номерами сегментов, в этом случае вы должны генерировать сегменты отдельно.

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
...