#python #pandas #dataframe #list-comprehension
#питон #панды #фрейм данных #список-понимание
Вопрос:
У меня есть фрейм данных панд, подобный этому:
Операция | Сумма Транзакции |
---|---|
Пополнить | 10.00 |
Дивиденд | 0.9 |
Налоги | 0.04 |
И я применяю такое понимание списка, как это:
df['Tax'] = ['0' if i == "Deposit" or i == "Dividend" else df['Transaction Amount'] for i in df['Transaction']] df['Net Amount'] = [df['Transaction Amount'] if i == "Deposit" or i == "Dividend" else -1 * df['Tax'] for i in df['Transaction']]
Однако для обоих я получаю странный вывод, подобный этому: «0 1.00 1 1000.00 2 1000.00 3…»
Сумма транзакции-это float64, я попытался сделать ее строкой, чтобы посмотреть, решит ли это проблему, но я продолжаю получать то же самое.
Комментарии:
1. Не могли бы вы предоставить фрейм данных, содержащий ожидаемый результат?
2. Чувак, » 0 » — это строка.
Ответ №1:
Попробуйте сделать это, используя np.where
вместо понимания списка.
import numpy as np df['Tax'] = np.where(df['Transaction'].isin(['Deposit', 'Dividend']), 0 ,df['Transaction Amount']) df['Net Amount'] = np.where(df['Transaction'].isin(['Deposit', 'Dividend']), df['Transaction Amount'], -1*df['Tax'])
Выход:
Transaction Transaction Amount Tax Net Amount 0 Deposit 10.00 0.00 10.00 1 Dividend 0.90 0.00 0.90 2 Taxes 0.04 0.04 -0.04