Панды / Numpy сдвигают строки в столбец в зависимости от существования - PullRequest
3 голосов
/ 13 мая 2019

У меня есть такой фрейм данных:

col_a | col b
  0      1
  0      2
  0      3
  1      1
  1      2

Я хочу преобразовать его в:

col_a | 1 | 2 | 3
  0     1   1   1
  1     1   1   0

К сожалению, большинство вопросов / ответов, вращающихся вокруг этой темы, просто поворачивают ее

Справочная информация: для Scikit я хочу использовать существование значений в столбце b в качестве атрибута / функции (например, своего рода CountVectorizer, но для значений строк в данном случае вместо текста)

Ответы [ 2 ]

3 голосов
/ 13 мая 2019

Используйте get_dummies с созданием первого столбца для index, последнее использование max для индекса только для возврата 1/0 значений в выходных данных:

df = pd.get_dummies(df.set_index('col_a')['col b'], prefix='', prefix_sep='').max(level=0)

print (df)
       1  2  3
col_a         
0      1  1  1
1      1  1  0
1 голос
/ 13 мая 2019

Вы можете использовать Groupby.cumcount и использовать его в качестве столбцов для поворотного фрейма данных, который можно получить с помощью pd.croostab и по умолчанию вычисляет таблицу частот факторов:

cols = df.groupby('col_a').cumcount()
pd.crosstab(index = df.col_a, columns = cols)

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