Подтвердить что ты не робот

Ближайший эквивалент факторной переменной в Python Pandas

Что является ближайшим эквивалентом переменной R Factor в Python pandas?

4b9b3361

Ответ 1

Этот вопрос, кажется, с года назад, но поскольку он по-прежнему открыт здесь для обновления. pandas ввел categorical dtype и работает очень похоже на factors в R. Для получения дополнительной информации см. эту ссылку:

http://pandas-docs.github.io/pandas-docs-travis/categorical.html

Воспроизведение фрагмента из ссылки выше, показывающей, как создать переменную "factor" в pandas.

In [1]: s = Series(["a","b","c","a"], dtype="category")

In [2]: s
Out[2]: 
0    a
1    b
2    c
3    a
dtype: category
Categories (3, object): [a < b < c]

Ответ 2

Если вы хотите сделать моделирование и т.д., много положительных эффектов для фактора в patsy library. Я признаюсь, что сам боролся с этим. Я нашел эти слайды полезными. Жаль, что я мог бы привести лучший пример, но это до тех пор, пока я сам не стал.

Ответ 3

Если вы хотите отобразить категориальную переменную на число, как это делает R, в Pandas реализована функция, которая даст вам следующее: https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.factorize.html

import pandas as pd

df = pd.read_csv('path_to_your_file')
df['new_factor'], _ = pd.factorize(df['old_categorical'], sort=True)

Эта функция возвращает как перечислимое отображение, так и список уникальных значений. Если вы просто присваиваете переменную, вам придется выбросить последнюю, как указано выше.

Если вы хотите доморощенное решение, вы можете использовать комбинацию набора и словаря внутри функции. Этот метод немного проще применить к нескольким столбцам, но вы должны заметить, что None, NaN и т.д. Будут включены в качестве категории в этом методе:

def factor(var):
    var_set = set(var)
    var_set = {x: y for x, y in [pair for pair in zip(var_set, range(len(var_set)))]}
    return [var_set[x] for x in var]


df['new_factor1'] = df['old_categorical1'].apply(factor)
df[['new_factor2', 'new_factor3']] = df[['old_categorical2', 'old_categorical3']].apply(factor)

Ответ 4

C # array containing category data
V # array containing numerical data

H = np.unique(C)
mydict = {}
for h in H:
    mydict[h] = V[C==h]


boxplot(mydict.values(), labels=mydict.keys())