Получить размер группы в панде - PullRequest
0 голосов
/ 30 мая 2018

У меня есть список стран по годам, например:

country  year  founding_year  other_vars
 Fake    1900    1950             data
 Fake    1901    1950             data
 Fake    1902    1950             data
             (...)
 USE     1900    1901             data
 USE     1901    1901             data
 USE     1901    1901             data

Поначалу founding_year немного сбивает с толку, но что делает набор данных, так это то, что он отслеживает страны, которые are countries in 2001 в год - сбор различной статистики по ним.

Нет. Я хочу создать график, показывающий создание / основание наций с течением времени.У меня уже есть переменная year для оси X, а переменная founding_year предоставляет необходимую мне информацию - но у меня возникают проблемы с операцией groupby, чтобы получить number of new nations per founding year

, который я используюследующая команда:

df.groupby(['founding_years', 'country']).size()

Я выбрал переменные founding_year и country, чтобы убедиться, что у меня есть уникальные пары (так как в каждой стране несколько строк)

Однако,это дает мне ошибочный результат.

founding_year  country                 
1945     Austria                     46
         Poland                      46
1946     Jordan                      46
         Lebanon                     46
         Philippines                 46
         Syria                       16
1947     India                       46
         Pakistan                    25
1948     Israel                      46
         Myanmar                     46
         North Korea                 46
         South Korea                 46
         Sri Lanka                   46

Вместо этого он возвращает количество строк, которые эта нация имеет в базе данных.Команда .count() дает тот же результат.Я попытался добавить year в конце функции groupby, но это просто возвращает целую кучу уникальных значений.

Я немного озадачен, вся необходимая мне информация есть, но мне кажется, что я не могу понять, как ее получить - кто-нибудь из вас знает, что мне не хватает?

1 Ответ

0 голосов
/ 30 мая 2018

Для количества наций в год основания, вы должны группировать только по годам.Например:

df = pd.DataFrame([['c1', 1950], ['c1', 1950], ['c1', 1950],
                   ['c2', 1960], ['c2', 1960], ['c2', 1960],
                   ['c3', 1970], ['c3', 1970], ['c3', 1970],
                   ['c4', 1960], ['c4', 1960], ['c4', 1960],
                   ['c5', 1950], ['c5', 1950], ['c5', 1950]],
                  columns=['country', 'year'])

res = df.groupby('year')['country'].nunique().reset_index()

print(res)

   year  country
0  1950        2
1  1960        2
2  1970        1

Или, если вам нужно добавить серию отсчетов в исходный кадр данных, используйте pd.DataFrame.transform:

df['count'] = df.groupby('year')['country'].transform('nunique')

print(df)

   country  year  count
0       c1  1950      2
1       c1  1950      2
2       c1  1950      2
...
6       c3  1970      1
7       c3  1970      1
8       c3  1970      1
9       c4  1960      2
...
13      c5  1950      2
14      c5  1950      2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...