Вопрос:
Я хочу создать новый столбец строки с условием. Пример:
from pandas import DataFrame GoT = {‘Old_Group’: [‘Jon Snow’, ‘Sansa Stark’,’Arya Stark’,’Robb Stark’,’Theon Greyjoy’ ]} df = DataFrame(GoT,columns=[‘Old_Group’])
“New_Group” должна проверить, содержит ли “Old_Group” строку “Stark” в любом месте, и назначить ее, например, “Stark Family”. Если условие “содержит = ‘Старк’” не подходит, тогда “новая_группа” должна быть назначена, например, “другим”
В SQL я бы сделал это так:
Select Old_Group ,case when Old_Group like ‘%Stark%’ then ‘Stark Family’ else ‘other’ end as New_Group from df
Спасибо
Лучший ответ:
Тебе нужно:
df[‘New_Group’] = df[‘Old_Group’].apply(lambda x : ‘Stark Family’ if ‘Stark’ in x else ‘other’) print(df)
Выход
Old_Group New_Group 0 Jon Snow other 1 Sansa Stark Stark Family 2 Arya Stark Stark Family 3 Robb Stark Stark Family 4 Theon Greyjoy other Ответ №1
Для этого вы можете использовать комбинацию np.where и str.contains. По сути, вы не можете применить np.where к соответствующему столбцу (в данном случае к старой группе) и проверить, содержит ли строка работу Stark.
df[‘New Group’] = np.where(df[‘Old Group’].str.contains(«Stark»), ‘Stark Family’, ‘Other’)
Просто убедитесь, что ваш столбец New Group является строковым типом данных, и вы импортировали numpy как пакет
Ответ №2
В случае, если имя Stark появляется в имени, подобном MacStark, эта опция не будет указана. Также он нечувствителен к регистру
df.assign(New_Column=df.replace({r'(?i)^((?!bStarkb).)*$’:’Other’,r'(?i)bStarkb’:’Stark Family’},regex=True)) Out[319]: Old_Group New_Column 0 Jon Snow Other 1 Sansa Stark Sansa Stark Family 2 Arya Stark Arya Stark Family 3 Robb Stark Robb Stark Family 4 Theon Greyjoy Other Ответ №3
Спасибо большое, Акшай. Это сработало перфект!