Если столбец содержит определенную строку, то выполните некоторую операцию для получения новых столбцов

#python #pandas #dataframe

#python #pandas #фрейм данных

Вопрос:

Я знаю, что подобные вопросы задавались ранее, но я не смог найти способ решить мою проблему.

Мой фрейм данных выглядит следующим образом:

 item   amount   currency   type          location
chair   69        $        type red       Miami
sofa   430       rupee     type yellow    Karnataka
  

и это тот результат, который я хочу:

 item   charge1  charge2  charge3  currency location
chair   69        69       69       $       Miami
sofa    430      860      860     rupee     Karnataka
  

Я пробовал это, но это не сработало:

 for i in df['type']:
    if 'red' in i:
        df['charge1'] = df['amount']
        df['charge2'] = df['amount']
        df['charge3'] = df['amount']
    if 'yellow' in i:
        df['charge1'] = df['amount']
        df['charge2'] = str((df['amount'].astype(int)) * 2)     
        df['charge3'] = str((df['amount'].astype(int)) * 2)
  

Ответ №1:

В for loop этом случае вам не нужно, вместо этого используйте DataFrame.assign str.contains для создания логической маски.

 df = df.assign(
    charge1=df['amount'], charge2=df['amount'], charge3=df['amount']
)

df.loc[df['type'].str.contains('yellow'), ['charge2', 'charge3']] *= 2
  

     item  amount currency         type   location  charge1  charge2  charge3
0  chair      69        $     type red      Miami       69       69       69
1   sofa     430    rupee  type yellow  Karnataka      430      860      860