Как я могу заменить дубликаты в столбце фрейма данных в python?

скажем, моя колонка выглядит примерно так:

trade_signal
buy
buy
buy
buy
sell
sell
sell
sell
buy
buy
buy
sell
sell
buy
sell
buy

Я хотел бы удалить повторяющиеся элементы в столбце и заменить их на NAN или 0, чтобы в итоге получилось что-то вроде:

trade_signal
buy
nan
nan
nan
sell
nan
nan
nan
buy
nan
nan
sell
nan
buy
sell
buy

Я совершенно не уверен в логике, которую я могу использовать для этого, я думаю, я бы каким-то образом перенаправил заполнение до следующего изменения сигнала со значениями NAN?

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
0
35
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Попробуйте маску со сдвигом:

df['trade_signal'] = df['trade_signal'].mask(df['trade_signal'].eq(
                                            df['trade_signal'].shift())
                                             )

  trade_signal
0           buy
1           NaN
2           NaN
3           NaN
4          sell
5           NaN
6           NaN
7           NaN
8           buy
9           NaN
10          NaN
11         sell
12          NaN
13          buy
14         sell
15          buy

спасибо, это здорово, возможно ли заполнить нанс до следующего сигнала на покупку/продажу? поэтому, если бы он пошел купить, нан, нан, купить, нан, продать, это закончилось бы как покупка, нан, нан, нан, нан, продать

Jason_Leto 21.03.2022 17:35

@Jason_Leto, не могли бы вы привести пример серии dict? (также попробуйте код один раз, так как я думаю, что это справится)

anky 21.03.2022 17:37

Код этого не делает, например df['Trade_Signal'] = pd.Series(np.array(['buy', 'NaN', 'Buy', 'Nan', 'Sell'])) я хотел бы быть все nans между первой покупкой и последним элементом (продажа)

Jason_Leto 21.03.2022 17:40

Извините, я использовал это в качестве примера, изменил его выше. Это дает мне ['купить'', nan', 'купить', nan, 'продать'], я хотел бы ['купить', nan''nan, nan, 'продать']

Jason_Leto 21.03.2022 17:43

@Jason_Leto просто сделайте df['trade_signal']=df['trade_signal'].ffill(), прежде чем пробовать этот код, и дайте мне знать

anky 21.03.2022 17:45

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