Новый столбец со значениями 1/0 дюйма pandas - PullRequest
0 голосов
/ 03 августа 2020

У меня есть этот фрейм данных с одним интересующим меня столбцом:

Col1   
code 
goal
python
detail

Я хотел бы создать новый столбец, Col2 со значениями 1 или 0 в зависимости от значения строк в Col1; в частности:

  • , если строка имеет значение в списке my_list=['goal', 'detail', 'objective'], тогда присвоить 1;
  • , если нет, то присвоить 0.

Мой результат будет:

Col1       Col2
code        0
goal        1
python      0
detail      1

Я пробовал

# set default value
df['Col2'] = 0

# update according to conditions
df.loc[df['Col1'].str.contains('goal'), 'Col2'] = 1
df.loc[df['Col1'].str.contains('detail'), 'Col2'] = 1
df.loc[df['Col1'].str.contains('objective'), 'Col2'] = 1

, но это кажется частично неправильным. Я думаю, что мне следует использовать apply и рассмотреть слово x в my_list, а не делать это вручную (это будет сложно в случае большого количества значений в списке).

Надеюсь, вы можете мне помочь.

Ответы [ 2 ]

2 голосов
/ 03 августа 2020

Используйте np.where + Series.isin

import numpy as np

my_list=['goal', 'detail', 'objective']

df['Col2'] = np.where(df.Col1.isin(my_list), 1, 0)

или как указано в @ Ch3steR

df['Col2'] = df.Col1.isin(my_list).astype('int')

     Col1  Col2
0   code      0
1    goal     1
2  python     0
3  detail     1
1 голос
/ 03 августа 2020

Как насчет применить :

import pandas as pd


df = pd.DataFrame(data = ['code', 'goal', 'python', 'detail'], columns = ['Col1'])

mylist=['goal', 'detail', 'objective']

df['Col2'] = df['Col1'].apply(lambda cell: 1 if cell in mylist else 0)

дает

     Col1  Col2
0    code     0
1    goal     1
2  python     0
3  detail     1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...