猿问

大熊猫中值为 1/0 的新列

我有这个数据框,其中有一列是我感兴趣的:


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不是手动执行(如果列表中有很多很多值,这将很困难)。


我希望你可以帮助我。


慕仙森
浏览 165回答 2
2回答

一只甜甜圈

使用np.where+Series.isinimport numpy as npmy_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  Col20   code      01    goal     12  python     03  detail     1

牧羊人nacy

如何申请:import pandas as pddf = 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  Col20    code     01    goal     12  python     03  detail     1
随时随地看视频慕课网APP

相关分类

Python
我要回答