Рассчитать различия между элементами в группе

1

Рассмотрим 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
Теги:
pandas
pandas-groupby

2 ответа

2
Лучший ответ

Вы можете сгруппировать их, а затем вычислить diff и abs (цепочку):

d.groupby('a').diff().abs().dropna()

Индекс может быть не таким запрошенным, но вы, вероятно, можете это выяснить.

  • 0
    Я работаю с набором данных 800k строк, и этот метод оказался для меня очень неэффективным.
  • 0
    Когда вы говорите «неэффективно», что именно вы имеете в виду?
Показать ещё 4 комментария
1

Так как каждая категория в 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()
  • 0
    Я действительно думал о том, чтобы написать, что этот подход требует, чтобы у вас было каждое значение в «а» только один раз. Я рад, что вы решили проблему.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню