Добавьте 1 - 5 к строкам, учитывая количество рядов (также может быть названо tiling / binning) в Pandas, Python - PullRequest
0 голосов
/ 08 ноября 2018

У меня есть кадр данных, который выглядит следующим образом:

enter image description here

Я не уверен, что такое технический термин (я думаю, что это тайлинг), но я хочу добавить в него новый столбец, содержащий строку чисел в диапазоне от 1 до 5, которая равномерно распределяется как можно лучше, поэтому мой фрейм данных выглядит примерно так:

enter image description here

Как мне это сделать?

Заранее спасибо.

РЕДАКТИРОВАТЬ 2018-11-08: Попросили вставить фактические данные в вопрос.

Как мои данные выглядят в настоящее время:

Name    Score
Harry   43
Sally   234
Mary    54
John    34
Francis 12
Devon   43
James   54
Holly   65
Molly   23
Nancy   12
Ben     32

Вот как я хочу, чтобы это выглядело:

Name    Score   Tile
Harry   43  1
Sally   234 1
Mary    54  1
John    34  2
Francis 12  2
Devon   43  3
James   54  3
Holly   65  4
Molly   23  4
Nancy   12  5
Ben 32  5

РЕДАКТИРОВАТЬ ДАЛЬНЕЙШИЙ ВОПРОС 2018-11-08:

enter image description here

Name    Animals Tile
Mary    cat 1
John    cat 2
Molly   cat 3
Harry   dog 1
Sally   dog 2
Francis dog 3
James   dog 1
Devon   horse   1
Nancy   mouse   1
Ben mouse   2
Holly   snake   1


import pandas as pd
df=pd.DataFrame({'Name':['Harry','Sally','Mary','John','Francis','Devon','James','Holly','Molly','Nancy','Ben'], 'Score': [43,234,54,34,12,43,54,65,23,12,32],
                 'Animal': ['dog', 'dog', 'cat', 'cat', 'dog', 'horse', 'dog', 'snake', 'dog', 'mouse', 'horse']})
tiles = pd.qcut(df.index, 3, labels=False)
tiles=tiles+1
df['tiles']=tiles
print(df)

ДАЛЬНЕЙШЕЕ РЕДАКТИРОВАНИЕ ДАЛЬНЕЙШЕГО ВОПРОСА 2018-11-08:

Я изменил свой код так:

import pandas as pd
import numpy as np

df=pd.DataFrame({'Name':['Harry','Sally','Mary','John','Francis','Devon','James','Holly','Molly','Nancy','Ben'], 'Score': [43,234,54,34,12,43,54,65,23,12,32],
                 'Animal': ['dog', 'dog', 'cat', 'cat', 'dog', 'horse', 'dog', 'snake', 'dog', 'mouse', 'horse']})
tiles = pd.qcut(np.arange(len(df["Animal"])),3)
df['tiles']=tiles
print (df)

И я получил следующий результат:

enter image description here

Ответы [ 3 ]

0 голосов
/ 08 ноября 2018

Вы можете использовать pd.qcut для индекса на вашем фрейме данных (при условии, что у вас есть целочисленный индекс):

import pandas as pd
df=pd.DataFrame({'Name':['Harry','Sally','Mary','John','Francis','Devon','James','Holly','Molly','Nancy','Ben'], 'Score': [43,234,54,34,12,43,54,65,23,12,32]})
tiles = pd.qcut(df.index, 5, labels=False)
tiles=tiles+1
df['tiles']=tiles
print(df)
0 голосов
/ 08 ноября 2018

Обычно вам понадобится modulus для разделения длины кадра данных.

См. Макет ниже:

import pandas as pd
import numpy as np
from first import *
df = pd.DataFrame({'Name': ['Harry', 'Sally','Mary', 'James', 'Ben', 'Nancy', 'Francis'],
 'Score': [10, 15, 18, 20, 25, 30,35]},)
df['Tile'] = range(len(df))
df['Tile'] = df['Tile']%5+1

df

см. Результаты:

enter image description here

0 голосов
/ 08 ноября 2018

Похоже, вам нужно qcut

pd.qcut(np.arange(len(df)),5,labels=[1,2,3,4,5])
Out[175]: 
[1, 1, 1, 2, 2, ..., 3, 4, 4, 5, 5]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...