我有這個數據框,其中有一列是我感興趣的:Col1 code goalpythondetail我想創建一個新列,Col2 的值為 1 或 0,具體取決于 Col1 中行的值;具體來說:如果一行在列表中有值my_list=['goal', 'detail', 'objective'],則賦值 1;如果沒有,則分配 0。我的輸出是:Col1 Col2code 0goal 1python 0detail 1我試過# set default valuedf['Col2'] = 0# update according to conditionsdf.loc[df['Col1'].str.contains('goal'), 'Col2'] = 1df.loc[df['Col1'].str.contains('detail'), 'Col2'] = 1df.loc[df['Col1'].str.contains('objective'), 'Col2'] = 1但這似乎是部分錯誤的。我認為我應該使用 apply 并考慮單詞 x 而my_list不是手動執行(如果列表中有很多很多值,這將很困難)。我希望你可以幫助我。
2 回答

一只甜甜圈
TA貢獻1836條經驗 獲得超5個贊
使用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

牧羊人nacy
TA貢獻1862條經驗 獲得超7個贊
如何申請:
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
添加回答
舉報
0/150
提交
取消