Как сохранить категории всех переменных в пандах? - PullRequest
0 голосов
/ 01 ноября 2018

У меня есть фрейм данных с числовыми и категориальными данными (df1). Я создаю базу данных, которая напоминает первый фрейм данных df2, то есть имеет те же имена столбцов и dtypes, что и df1. Однако, помимо имен и dtypes df1, я также хотел бы сохранить категории категориальных переменных, даже если они не появляются в df2 при его создании.

На данный момент самое простое решение, которое я нашел, - это перебрать все категориальные переменные на df2, добавив категории каждой категориальной переменной df1. Однако я считаю, что должно быть более быстрое / более эффективное решение, чем то, которое я предлагаю.

df1 = pd.DataFrame({
'A' : pd.Categorical(list('bbeebbaa'), categories=['e','a','b'], ordered=True),
'B' : [1,2,1,2,2,1,2,1],
'C' : pd.Categorical(list('ddeeccaa'), categories=['e','a','d', 'c'], ordered=True)})

df2 = pd.DataFrame({
'A' : pd.Categorical(list('bbeebbbb'), categories=['e', 'b'], ordered=True),
'B' : [1,2,1,2,2,1,2,1],
'C' : pd.Categorical(list('cccccccc'), categories=['c'], ordered=True)})

categorical = ['A', 'B']
for var in categorical:
    df2[var] = df2[var].cat.add_categories(df1[var].cat.categories)

1 Ответ

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

Если все категории df2 находятся в df1, вы можете использовать функцию set_categories ().

l = list(df1['A'].cat.categories)
df2['A'] = df2['A'].cat.set_categories(l)

или в одну строку:

df2['A'] = df2['A'].cat.set_categories(list(df1['A'].cat.categories))

Если и df1, и df2 содержат уникальные для них категории, я не уверен, как бы я справился с этим - вероятно, аналогично тому, как вы здесь изложили.

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