Я хотел бы объединить два столбца в один, но я не уверен, как это сделать эффективно. Мой дф выглядит так:
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
Если вы знаете эффективное решение этой проблемы, я был бы очень признателен!
Вы можете использовать маску для всех отрицательных значений и заполнить пропущенные значения значениями 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)
не оптимальный ответ