Как установить все повторяющиеся значения в столбце в пустые ячейки в python или excel

avatar
Andrea Longoni
1 июля 2021 в 17:16
53
1
0

I have data on quarterly market values for a large cross-section of american firms. Some firms were either delisted or acquired by other companies. Datastream automatically repeats the last available value after this date. I need to change all these repetead values to blank cells. Any clue on how I can achieve that on python?

У меня есть данные о квартальных рыночных ценах большого количества американских фирм. Некоторые фирмы были либо исключены из листинга, либо приобретены другими компаниями. Datastream автоматически повторяет последнее доступное значение после этой даты. Мне нужно изменить все эти повторяющиеся значения на пустые ячейки до последнего наблюдения за моим набором данных. Любая подсказка о том, как я могу добиться этого на питоне?

Спасибо

Источник

Ответы (1)

avatar
Keith Johnson
1 июля 2021 в 17:48
0

Если я понимаю, о чем вы спрашиваете, и ваш файл является файлом Excel, что-то вроде этого должно работать:

import pandas as pd
import numpy as np

df = pd.read_excel('path to your excel file')

for col in df.columns:
    df[col][df[col].duplicated()] = np.nan #you could replace this with an empty string or whatever

Вот пример игрушки, чтобы вы могли увидеть, что это будет делать

import pandas as pd
import numpy as np

df = pd.DataFrame({"A":["foo", "foo", "foo", "bar"], "B":[0,1,1,1], "C":["A","A","B","A"]})

for col in df.columns:
    df[col][df[col].duplicated()] = np.nan #you could replace this with an empty string or whatever

print(df)

Если вы довольны df, вы также можете сохранить его как файл Excel или csv с помощью pandas to_csv или to_excel.

Keith Johnson
1 июля 2021 в 19:02
0

Попробуйте то, что у меня есть, и дайте мне знать, если это то, что вы ищете. Если это не так, было бы лучше, если бы вы могли сначала опубликовать любые ошибки, которые вы получаете, или сказать, что вы хотели бы работать по-другому.

Andrea Longoni
1 июля 2021 в 19:42
0

Да, это то, что я ищу. В идеале я хотел бы удалять повторяющиеся значения только тогда, когда одно и то же значение повторяется более n раз подряд. Поскольку я хочу удалить данные после того, как фирма была исключена из листинга или приобретена, но я не хочу терять данные в периоды, когда фирмы все еще были активны.

Keith Johnson
1 июля 2021 в 20:04
0

df[col].duplicated().sum() даст вам общее количество дубликатов в столбце. df[col].duplicated().rolling(n).sum() даст вам скользящую сумму по n записям, чтобы вы могли увидеть, есть ли в столбце какая-либо точка, где сумма была равна n, и удалить оттуда . Вы можете столкнуться с неудачными случаями, когда это не удастся, но я думаю, что это будет редко. Не уверен, что есть более элегантное решение. Мне будет интересно посмотреть, ответит ли кто-нибудь еще