Разработка возможностей с использованием Python - PullRequest
0 голосов
/ 10 октября 2019

У меня есть набор данных pandas, в котором один из столбцов выглядит следующим образом:

         Genre
        ------------
         Documentary
         Documentary
         Comedy|Mystery|Thriller
         Animation|Comedy|Family
         Documentary
         Documentary|Family
         Action|Adventure|Fantasy|Sci-Fi
         Crime|Drama|Mystery
         Action|Crime|Mystery|Thriller

Как я могу создать несколько столбцов с каждым названием жанра и заполнить 1, если он содержит этот жанр, иначе 0?

Ожидаемый результат: Pandas Dataframe

  Documentary  Comedy  Mystery  Thriller  Animation  Family  ......
    1           0       0          0        0          0
    1            0       0          0        0          0
    0            1        1         1        0          0

и т. Д.

Я пытался сначала преобразовать его в список, а затем разделить, но это не пифический способ сделать это.

Можем ли мы сделать это эффективно, используя функцию apply или другие эффективные методы?

Ответы [ 2 ]

2 голосов
/ 10 октября 2019

Использование Series.explode + pd.get_dummies :

s_explode=df['Genre'].str.split('|').explode()
dfc=pd.get_dummies(s_explode).groupby(level=0).sum()
new_df=pd.concat([df['Genre'],dfc],axis=1)
print(new_df)

                              Genre  Action  Adventure  Animation  Comedy  \
0                      Documentary       0          0          0       0   
1                      Documentary       0          0          0       0   
2          Comedy|Mystery|Thriller       0          0          0       1   
3          Animation|Comedy|Family       0          0          1       1   
4                      Documentary       0          0          0       0   
5               Documentary|Family       0          0          0       0   
6  Action|Adventure|Fantasy|Sci-Fi       1          1          0       0   
7              Crime|Drama|Mystery       0          0          0       0   
8    Action|Crime|Mystery|Thriller       1          0          0       0   

   Crime  Documentary  Drama  Family  Fantasy  Mystery  Sci-Fi  Thriller  
0      0            1      0       0        0        0       0         0  
1      0            1      0       0        0        0       0         0  
2      0            0      0       0        0        1       0         1  
3      0            0      0       1        0        0       0         0  
4      0            1      0       0        0        0       0         0  
5      0            1      0       1        0        0       0         0  
6      0            0      0       0        1        0       1         0  
7      1            0      1       0        0        1       0         0  
8      1            0      0       0        0        1       0         1 
0 голосов
/ 10 октября 2019

Это просто, просто с str.get_dummies

df1 = df.Genre.str.get_dummies('|')

Out[385]:
   Action  Adventure  Animation  Comedy  Crime  Documentary  Drama  Family  \
0       0          0          0       0      0            1      0       0
1       0          0          0       0      0            1      0       0
2       0          0          0       1      0            0      0       0
3       0          0          1       1      0            0      0       1
4       0          0          0       0      0            1      0       0
5       0          0          0       0      0            1      0       1
6       1          1          0       0      0            0      0       0
7       0          0          0       0      1            0      1       0
8       1          0          0       0      1            0      0       0

   Fantasy  Mystery  Sci-Fi  Thriller
0        0        0       0         0
1        0        0       0         0
2        0        1       0         1
3        0        0       0         0
4        0        0       0         0
5        0        0       0         0
6        1        0       1         0
7        0        1       0         0
8        0        1       0         1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...