#python #pandas
Вопрос:
В настоящее время у меня есть фрейм данных panda, который состоит из двух столбцов, столбца «индекс» и столбца «цена», как показано ниже:
Мне нужно создать новый столбец под названием «Журнал», в котором я хочу выполнить две отдельные операции в зависимости от того, являются ли данные в столбце «Цена» отрицательными или положительными. Для строк, которые являются положительными, мне нужно выполнить следующую операцию:
df["Log"] = 10**(df['Price'])
И если число в столбцах «Цена» отрицательное, выполните приведенную ниже операцию, чтобы получить абсолютное значение этой ячейки:
df["Log"] = -10**(df['Price'].abs())
Не могли бы вы, пожалуйста, показать мне код python, в котором описанные выше операции могут быть выполнены с исходным фреймом данных pandas, где конечный результат должен выглядеть следующим образом:
Я включил код для создания исходного фрейма данных ниже:
# Create dataframe
cars = {'Index': [1,2,3,4,5,6,7,8,9,10],
'Price': [2.266021, 2.160644, -2.266021, 2.103899, 2.019323, 2.134563, 2.193423, 2.495643, 2.129344, 2.876545]
}
df = pd.DataFrame(cars, columns = ['Index', 'Price'])
print (df)
Комментарии:
1. См
np.where()
.раздел и для более сложных условных операцийnp.select()
.2. Вы действительно хотите увеличить цену в геометрической прогрессии и назвать ее логарифмом? Это противоположности друг друга.
Ответ №1:
Попробуйте с np.where
import numpy as np
df["Log"] = np.where(df.Price<0, -10**(df['Price'].abs()), 10**(df['Price']))
Ответ №2:
Для положительных чисел df['Price'].abs()
это то же самое, что и просто df['Price']
. Это может быть выражено без каких-либо условий:
df["Log"] = np.sign(df['Price']) * (10**df['Price'].abs())