Расширение одного столбца до нескольких столбцов с pandas? - PullRequest
0 голосов
/ 24 апреля 2020

Я пытаюсь отсортировать данные из опроса, который я провел, например, в моем опросе я спросил, был ли у них диагностирован какой-либо из следующих признаков (СДВГ, тревога, депрессия и т. Д. c). Теперь в одной из моих колонок у меня есть несколько значений для людей, которые нажали несколько расстройств. Я хотел бы создать столбец для каждого расстройства и иметь его таким, чтобы он имел значение True или False в зависимости от того, выбрал ли его пользователь.

{'Mental_health':
    ['ADHD, Anxiety, Depression',
     'ADHD, Depression, PTSD',
     'Anxiety, Borderline Personality Disorder, Depression',
     'OCD',
     'Anxiety',
     'Anxiety',
     'ADHD, Anxiety, Bipolar, Borderline Personality Disorder, Depression, PTSD, Schizophrenia',
     'ADHD, Anxiety, Autism, Depression, PTSD',
     'Anxiety, Depression',
     'Depression',
     'Depression',
     'None of the above',
     'Autism, Depression, PTSD',
     'None of the above',
     'ADHD, PTSD']
}

Ответы [ 2 ]

1 голос
/ 24 апреля 2020
# sample data
s = """Mental_Health
ADHD, Anxiety, Depression
ADHD, Depression, PTSD
Anxiety, Borderline Personality Disorder, Depression
OCD
Anxiety
Anxiety
ADHD, Anxiety, Bipolar, Borderline Personality Disorder, Depression, PTSD, Schizophrenia
ADHD, Anxiety, Autism, Depression, PTSD
Anxiety, Depression
Depression
Depression
None of the above
Autism, Depression, PTSD
None of the above
ADHD, PTSD"""
df = pd.read_csv(StringIO(s), sep='|')
# str.split then expand list into columns and stack
new = df['Mental_Health'].str.split(', ', expand=True).stack()
# get_dummies and sum
final_df = pd.get_dummies(new).sum(level=0).astype(bool)

     ADHD  Anxiety  Autism  Bipolar  Borderline Personality Disorder  \
0    True     True   False    False                            False   
1    True    False   False    False                            False   
2   False     True   False    False                             True   
3   False    False   False    False                            False   
4   False     True   False    False                            False   
5   False     True   False    False                            False   
6    True     True   False     True                             True   
7    True     True    True    False                            False   
8   False     True   False    False                            False   
9   False    False   False    False                            False   
10  False    False   False    False                            False   
11  False    False   False    False                            False   
12  False    False    True    False                            False   
13  False    False   False    False                            False   
14   True    False   False    False                            False   

    Depression  None of the above    OCD   PTSD  Schizophrenia  
0         True              False  False  False          False  
1         True              False  False   True          False  
2         True              False  False  False          False  
3        False              False   True  False          False  
4        False              False  False  False          False  
5        False              False  False  False          False  
6         True              False  False   True           True  
7         True              False  False   True          False  
8         True              False  False  False          False  
9         True              False  False  False          False  
10        True              False  False  False          False  
11       False               True  False  False          False  
12        True              False  False   True          False  
13       False               True  False  False          False  
14       False              False  False   True          False  
0 голосов
/ 24 апреля 2020

Используйте str, затем разделите с expand атрибутом:

results = df.Mental_health.str.split(', ', expand=True)

Вы можете добавить эти результаты к исходному df

df_f = pd.concat([df, results], axis=1)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...