pandas вычислить разницу с использованием фильтров столбцов - PullRequest
1 голос
/ 26 февраля 2020

У меня есть pandas кадр данных, например:

| country | year | people 
| US      | 1990 | 20 
| US      | 1991 | 34 
| ..      | ..   | ..
| US      | 2020 | 456 
| UK      | 1990 | 5 
| UK      | 1991 | 7 
| ..      | ..   | ..
| UK      | 2020 | 300 

Я хотел бы рассчитать разницу между 2020 и 1990 годами для каждой из стран, ожидаемый результат:

|country | difference 
|US      | 436
|UK      | 295

1 Ответ

1 голос
/ 26 февраля 2020

Поскольку интересующими годами являются 2020 и 1990 годы, мы фильтруем только по этим годам, сортируем столбец людей по убыванию, группируем страну и используем numpy вычитаем и numpy уменьшите , чтобы получить разницу:

(df.query('year==[2020,1990]')
 .sort_values('people',ascending=False)
 .groupby('country',sort=False)
 .agg(difference=('people',np.subtract.reduce))
 )

          difference
country 
   US       436
   UK       295

Обратите внимание, что групповая сортировка не сортируется - это гарантирует, что отсортированные значения не будут изменены (нам нужно, чтобы каждый столбец имел самое высокое в верхней части, чтобы метод вычитания и сокращения в агрегации даст положительные значения)

Для деления:

(df.query('year==[2020,1990]')
 .sort_values('people',ascending=False)
 .groupby('country',sort=False)
 .agg(fst=('people','first'), lst=('people','last'))
 .assign(division=lambda x: x.fst.div(x.lst))
 )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...