【问题标题】:Calculate number of cases per year from pandas data frame从熊猫数据框中计算每年的病例数
【发布时间】:2021-05-27 01:17:52
【问题描述】:

我有一个格式如下的数据框:

import pandas as pd
d = {'case_id': [1, 2, 3], 'begin': [2002, 1996, 2001], 'end': [2019, 2001, 2002]}
df = pd.DataFrame(data=d)

大约有 1,000 例。

我需要计算每年有多少案件有效。该信息可以从“开始”和“结束”列中获得。 例如,案例 2 在 1996 年至 2001 年之间生效。

生成的数据框应如下所示:

e = {'year': [1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019], 
'cases': [1, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]}
df_ = pd.DataFrame(data=e)

知道如何用几行代码处理 1000 个案例吗?

【问题讨论】:

    标签: pandas dataframe


    【解决方案1】:

    range 然后explode 分配新值

    df['new'] = [range(x,y+1) for x , y in zip(df.begin,df.end)]
    df = df.explode('new')
    

    我们做到了groupby + nunique

    out = df.groupby(['new']).case_id.nunique().reset_index()
    Out[257]: 
         new  case_id
    0   1996        1
    1   1997        1
    2   1998        1
    3   1999        1
    4   2000        1
    5   2001        2
    6   2002        2
    7   2003        1
    8   2004        1
    9   2005        1
    10  2006        1
    11  2007        1
    12  2008        1
    13  2009        1
    14  2010        1
    15  2011        1
    16  2012        1
    17  2013        1
    18  2014        1
    19  2015        1
    20  2016        1
    21  2017        1
    22  2018        1
    23  2019        1
    

    【讨论】:

      【解决方案2】:

      这是另一种方式:

      df.assign(year = df.apply(lambda x: np.arange(x['begin'],x['end']+1),axis=1)).explode('year').groupby('year')['case_id'].count().reset_index()
      

      【讨论】:

        猜你喜欢
        • 2018-08-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-11-23
        • 2021-07-22
        • 1970-01-01
        • 2019-05-13
        相关资源
        最近更新 更多