对于数据获取,公司在过去 3 年中的参与者人数增加 Pandas

For data get the Companies have increasing no of participants in last 3 years in Pandas

下面是给出的数据。

year    Company/Account Name    participants 
2019    Willis Towers Watson    418
2020    Willis Towers Watson    568
2021    Willis Towers Watson    57
2019    White Plains Hospital   1904
2020    White Plains Hospital   742
2021    White Plains Hospital   3710
2019    Westchester Flying Club 310
2020    Westchester Flying Club 463
2021    Westchester Flying Club 562
2019    Us Open                 282
2020    Us Open                 742
2021    Us Open                 812
2019    Upledger Institute      625
2020    Upledger Institute      49
2021    Upledger Institute      152

输出应该是

  1. 威彻斯特飞行俱乐部

  2. 美国公开赛

以上两家公司在过去三年的参与人数都在增加。

数据:

{'year': [2019, 2020, 2021, 2019, 2020, 2021, 2019, 2020, 
          2021, 2019, 2020, 2021, 2019, 2020, 2021],
 'Company/Account Name': ['Willis Towers Watson', 'Willis Towers Watson', 
                          'Willis Towers Watson', 'White Plains Hospital', 
                          'White Plains Hospital', 'White Plains Hospital',
                          'Westchester Flying Club', 'Westchester Flying Club', 
                          'Westchester Flying Club', 'Us Open', 'Us Open', 
                          'Us Open', 'Upledger Institute', 'Upledger Institute',
                          'Upledger Institute'],
 'participants': [418, 568, 57, 1904, 742, 3710, 310, 
                  463, 562, 282, 742, 812, 625, 49, 152]}

我们可以 groupby + diff + gt 得到一个布尔系列,如果参与者比上一年增加,则该系列可能 returns 为真,否则为假。然后使用 groupby + all 构建一个掩码来过滤参与度每年都在增加的公司。

最后,使用掩码过滤相关公司:

s = (df.groupby('Company/Account Name')['participants'].diff().fillna(0.1).gt(0)
     .groupby(df['Company/Account Name']).all())
out = s.index[s].tolist()

除了执行 2 groupbys,我们还可以 apply 执行相同工作的 lambda:

s = df.groupby('Company/Account Name')['participants'].apply(lambda x: x.diff().dropna().gt(0).all())

输出:

['Us Open', 'Westchester Flying Club']