Рассмотрим dataframe с ровно две строки в каждой категории в: a
d = pd.DataFrame({"a": ["a", "b", "c", "a", "b", "c"], "b": [1, 3, 1, 4, 2, 6]})
> a b
0 a 1
1 b 3
2 c 1
3 a 4
4 b 2
5 c 6
Я хочу рассчитать абсолютные различия между b
на a
:
a b
0 a 3
1 b 1
2 c 5
Вы можете сгруппировать их, а затем вычислить diff и abs (цепочку):
d.groupby('a').diff().abs().dropna()
Индекс может быть не таким запрошенным, но вы, вероятно, можете это выяснить.
Так как каждая категория в a
имеет ровно 2 строки, то кадр данных можно разбить на два, как показано ниже:
first = d.drop_duplicates("a", keep="first")
second = d.drop_duplicates("a", keep="last")
Затем объедините их и вычислите разницу:
merged = first.merge(second, on="a")
(merged.b_x - merged.b_y).abs()