Объединить два столбца при изменении знака pandas

Я хотел бы объединить два столбца в один, но я не уверен, как это сделать эффективно. Мой дф выглядит так:

col1   col2
 0.4   -0.9
 0.2   -0.5
-0.1    0.2
-0.2    0.4
 0.8   -0.6

Поэтому, если один столбец положительный, другой всегда отрицательный. Но я хотел бы, чтобы все отрицательные числа из столбца 1 были заменены всеми положительными числами из столбца 2. Таким образом, это будет выглядеть так:

col1   
 0.4   
 0.2   
 0.2
 0.4
 0.8  

Если вы знаете эффективное решение этой проблемы, я был бы очень признателен!

14 Задание: Типы данных и структуры данных Python для DevOps
14 Задание: Типы данных и структуры данных Python для DevOps
проверить тип данных используемой переменной, мы можем просто написать: your_variable=100
Python PyPDF2 - запись метаданных PDF
Python PyPDF2 - запись метаданных PDF
Python скрипт, который будет записывать метаданные в PDF файл, для этого мы будем использовать PDF ридер из библиотеки PyPDF2 . PyPDF2 - это...
Переменные, типы данных и операторы в Python
Переменные, типы данных и операторы в Python
В Python переменные используются как место для хранения значений. Пример переменной формы:
Почему Python - идеальный выбор для проекта AI и ML
Почему Python - идеальный выбор для проекта AI и ML
Блог, которым поделился Harikrishna Kundariya в нашем сообществе Developer Nation Community.
Как автоматически добавлять котировки в заголовки запросов с помощью PyCharm
Как автоматически добавлять котировки в заголовки запросов с помощью PyCharm
Как автоматически добавлять котировки в заголовки запросов с помощью PyCharm
Анализ продукта магазина на Tokopedia
Анализ продукта магазина на Tokopedia
Tokopedia - это место, где продавцы могут продавать свои товары. Товар должен быть размещен на витрине, чтобы покупателям было легче найти товар...
1
0
385
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Вы можете использовать маску для всех отрицательных значений и заполнить пропущенные значения значениями col2.

m = df['col1'] < 0 
df['col1'] = df['col1'].mask(m).fillna(df['col2'])
print(df)
   col1  col2
0   0.4  -0.9
1   0.2  -0.5
2   0.2   0.2
3   0.4   0.4
4   0.8  -0.6
Ответ принят как подходящий

Найдите строки, в которых col1 меньше 0, и замените на col2:

df.loc[df['col1'] < 0, 'col1'] = df['col2']

результат:

   col1  col2
0   0.4  -0.9
1   0.2  -0.5
2   0.2   0.2
3   0.4   0.4
4   0.8  -0.6

используя df.where и .drop

df_new = df.where(df['col1'].ge(0),df['col2'],axis=0).drop('col2',axis=1)

print(df_new)


   col1
0   0.4
1   0.2
2   0.2
3   0.4
4   0.8

Вы можете применить свою функцию выбора к Dataframe и впоследствии удалить второй столбец.

df["col1"] = df.apply(lambda row: max(row.col1, row.col2), axis=1)
df = df.drop("col2", axis=1)

не оптимальный ответ

Fatemeh Sangin 21.11.2022 13:28

Другие вопросы по теме