【问题标题】:Get group size in pandas dataframe获取熊猫数据框中的组大小
【发布时间】:2018-05-29 22:56:16
【问题描述】:

我有一个按年份列出的国家/地区列表,就像这样

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 的国家 - 收集有关它们的各种统计数据。

不,我想创建一个图表来显示随着时间的推移国家的创建/建立。我已经有用于 X 轴的 year 变量,而 founding_year 变量提供了我需要的信息 - 但我无法使用 groupby 操作来获取 number of new nations per founding year

我使用以下命令:

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

我同时选择了founding_yearcountry 变量以确保我有唯一的对(因为每个国家有多个行)

但是,这给了我一个错误的结果。

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() 命令给出相同的结果。 我尝试在 groupby 函数的末尾添加year,但这使它只返回一大堆唯一值。

我有点困惑,我需要的所有信息都在那里,但我似乎无法弄清楚如何获得它 - 你们有谁知道我错过了什么吗?

【问题讨论】:

    标签: python pandas dataframe pandas-groupby


    【解决方案1】:

    对于每个创始年份的国家数量,您应该只按年份分组。例如:

    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
    

    【讨论】:

      猜你喜欢
      • 2014-06-27
      • 1970-01-01
      • 2014-06-04
      • 2022-01-06
      • 2015-05-10
      • 2021-06-05
      • 2019-01-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多