Создайте новый столбец в кадре данных Pandas, используя столбец и его значение - PullRequest
0 голосов
/ 25 апреля 2018

У меня есть фрейм данных панд

 df = pd.DataFrame({'id':[1,2,3,4],
                    'attr1':[1,1,0,0],
                    'attr2':[0,1,1,0],
                    'attr3':[1,1,1,0],
                    'attr4':[1,1,1,1]})

enter image description here

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

enter image description here

В основном создайте новую переменную, которая будет содержать столбцы предыдущего кадра данных, если ее значение равно 1

1 Ответ

0 голосов
/ 25 апреля 2018

Использование:

df1 = df.filter(like='attr')
df = df.drop(df1.columns, axis=1)
df['var'] = df1.dot(df1.columns + ' ').str.rstrip()
print (df)
   id                      var
0   1        attr1 attr3 attr4
1   2  attr1 attr2 attr3 attr4
2   3        attr2 attr3 attr4
3   4                    attr4

Объяснение

  1. Фильтровать столбцы по filter - только атрибутные столбцы
  2. Удалить столбцы с помощью drop
  3. Умножение матриц по столбцам с DataFrame.dot
  4. Последнее удаление последних пробелов по rstrip

Альтернативное решение:

cols = df.columns[df.columns.str.startswith('attr')]
df = df.drop(cols, axis=1).assign(var=df[cols].dot(cols + ' ').str.rstrip())
print (df)
   id                      var
0   1        attr1 attr3 attr4
1   2  attr1 attr2 attr3 attr4
2   3        attr2 attr3 attr4
3   4                    attr4

Для возврата назад используйте str.get_dummies:

df1 = df.join(df.pop('var').str.get_dummies(' '))
print (df1)
   id  attr1  attr2  attr3  attr4
0   1      1      0      1      1
1   2      1      1      1      1
2   3      0      1      1      1
3   4      0      0      0      1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...