Передача значений строк из нескольких столбцов в числа в Pandas - PullRequest
2 голосов
/ 19 сентября 2019

Я работаю с таким фреймом данных:

   id type1 type2 type3
0   1   dog   NaN   NaN
1   2   cat   NaN   NaN
2   3   dog   cat   NaN
3   4   cow   NaN   NaN
4   5   dog   NaN   NaN
5   6   cat   NaN   NaN
6   7   cat   dog   cow
7   8   dog   NaN   NaN

Как я могу перенести его на следующий фрейм данных?Спасибо.

   id  dog  cat  cow
0   1  1.0  NaN  NaN
1   2  NaN  1.0  NaN
2   3  1.0  1.0  NaN
3   4  NaN  NaN  1.0
4   5  1.0  NaN  NaN
5   6  NaN  1.0  NaN
6   7  1.0  1.0  1.0
7   8  1.0  NaN  NaN

1 Ответ

4 голосов
/ 19 сентября 2019

Первый фильтр только type столбцы по DataFrame.filter, изменение формы по DataFrame.stack, поэтому возможен вызов Series.str.get_dummies.Затем для вывода 0/1 используйте max на первом уровне MultiIndex и измените 1 на NaN s на DataFrame.mask.Последнее добавление первого столбца по DataFrame.join:

df1 = df.filter(like='type').stack().str.get_dummies().max(level=0).mask(lambda x: x == 0)

Или использование get_dummies и max для имен столбцов и последнее изменение 1 в NaN с:

df1 = (pd.get_dummies(df.filter(like='type'), prefix='', prefix_sep='')
         .max(level=0, axis=1)
         .mask(lambda x: x == 0))

df = df[['id']].join(df1)
print (df)
   id  cat  cow  dog
0   1  NaN  NaN  1.0
1   2  1.0  NaN  NaN
2   3  1.0  NaN  1.0
3   4  NaN  1.0  NaN
4   5  NaN  NaN  1.0
5   6  1.0  NaN  NaN
6   7  1.0  1.0  1.0
7   8  NaN  NaN  1.0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...