Преобразование значений всего фрейма данных в уникальные целые числа для выполнения теста Фишера - PullRequest
1 голос
/ 17 октября 2019

Я хотел бы изменить свои строковые значения на уникальные целочисленные IDS для всего фрейма данных, это упрощенная версия того, что я хочу сделать. Реальный имеет более 20 столбцов и более 100 000 строк. Мне нужно преобразовать это, чтобы выполнить тест Фишера для каждой строки, который должен различать уникальные целые числа, чтобы увидеть разницу между группами столбцов.

X col1col2 col3

1 0/0 1/1 0/0

2 0/2 0/0 1/1

3 1/2 0/2 1/1

4 0/0 0/0 0/0

до

X col1 col2 col3

1 1 2 1

2 3 1 2

3 4 3 2

4 1 1 1

Попытка факторизовать,но я не мог понять, как это сделать для всего фрейма данных, как это, мог сделать это только для столбцов со следующим кодом: df = df.apply (lambda x: pd.factorize (x) [0]).

То, что работает, так это просто делать это для каждой строки, так как его анализируют для строки.

Ответы [ 3 ]

1 голос
/ 17 октября 2019

Используйте df.rank с method='dense'. Каждой уникальной строке будет присвоен уникальный номер / ранг

df_final = df.set_index('X').rank(method='dense').astype(int)

Out[244]:
   col1  col2  col3
X
1     1     3     1
2     2     1     2
3     3     2     2
4     1     1     1
0 голосов
/ 17 октября 2019

вы можете сделать это, используя функцию apply

df = pd.DataFrame([['0/0', '1/1', '0/0'], ['0/2', '0/0', '1/1'], ['1/2', '0/2', '1/1'], ['0/0', '0/0', '0/0']], columns=('col1', 'col2', 'col3'))

df2 = df.apply(lambda s: [sum(map(int,x.split("/"))) for x in s])
df2[df2==0] = 1
df2

Результат

 col1  col2  col3
0     1     2     1
1     2     1     2
2     3     2     2
3     1     1     1
0 голосов
/ 17 октября 2019

Попробуйте:

df = pd.DataFrame([['0/0', '1/1', '0/0'], ['0/2', '0/1', '1/1'], ['1/2', '0/2', '1/1'], ['0/0', '0/0', '0/0']])

d = {n:m for m, n in enumerate(list(set([j for i in df.values.tolist() for j in i])))}

df_new = df.replace(d)

Ввод:

     0    1    2
0  0/0  1/1  0/0
1  0/2  0/1  1/1
2  1/2  0/2  1/1
3  0/0  0/0  0/0

Ввод:

   0  1  2
0  2  4  2
1  1  3  4
2  0  1  4
3  2  2  2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...