Я имею дело с некоторыми финансовыми данными, содержащими развороты. Сторнирование - это, по сути, исправление в таблице, которое смещает другие значения в таблице, добавляя в таблицу равное количество противоположного знака. Моя работа - очистить эти ценности.
Возьмите для примера этот кадр данных:
df = pd.DataFrame({"a":["a","b","c","a","a"],
"b":[-2,5,2,2,7],
"xtra_col":["X","X","X","X","X"]})
a b xtra_col
0 a -2 X
1 b 5 X
2 c 2 X
3 a 2 X
4 a 7 X
В этом случае строка 3 является обращением к строке 0, и они должны быть отброшены. В то же время строка 2 не является обращением к строке 0, но противоположными значениями, поскольку они не совпадают в столбце a.
Результат должен выглядеть так.
a b xtra_col
0 b 5 X
1 c 2 X
2 a 7 X
Вопрос в том, как я могу удалить такие развороты из моей таблицы? Я смотрел на drop_duplicates()
с подмножеством a и b, но это не сработало бы, потому что оно будет соответствовать только тем же значениям, но не противоположным.
У меня такое чувство, что я могу достичь чего-то с groupby
, но я не уверен, как это организовать.
Дополнительное примечание, оно также должно работать в случаях, когда существует нечетное количество отрицательных значений. Рассмотрим случай ниже, результат должен быть следующим:
df = pd.DataFrame({"a":["a","b","c","a","a"],
"b":[-2,5,2,2.0,-2],
"xtra_col":["X","X","X","X","X"]})
a b xtra_col
0 a -2.0 X
1 b 5.0 X
2 c 2.0 X
3 a 2.0 X
4 a -2.0 X
вывод должен быть:
a b xtra_col
1 b 5.0 X
2 c 2.0 X
3 1 -2.0 X