#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