熊猫-按ID分组,分配类别

克莱姆·德普

我有一个大约有60,000条记录的熊猫数据框,如下所示:

             ID     P1   YEAR
     0  20184045    MK   2020   
     1  20184045    GF   2020   
     2  20184011    EC   2020   
     3  20184011    MK   2020   
     4  20184011    EC   2020   
     5  20180673    GF   2020   

其中ID是记录的ID(8位整数),它具有P1属性,该属性可以采用10个不同的值(所有都是2个字符的字符串),年份在1995年至2020年之间。每个ID可以包含介于1和5个不同的年份值。我想获得2个其他数据框:一个数据框,该框为我提供有关每年P1的不同值的数量以及每个ID的信息,如下所示:

    ID          YEAR       NUMBER OF DISTINCT VALUES OF P1 FOR EACH YEAR
0   20184045    2020                         n
1   20184045    2019
2   20184045    2018
3   20184045    2017
4   20184011    2020
5   20180673    2020

我的第二个数据帧将计算每个ID的P1不同值的总数。

    ID            NUMBER OF DISTINCT VALUES OF P1 OVERALL
0   123                        n1
1   456                        n2
2   789                        n3
3   987                        n4
4   654                        n1
5   321                        n2

我尝试查找如何使用iterrows()和iteritems()遍历一个数据框,但是我无法找到如何同时遍历3列并按ID分组的方法。

我也研究了itertuples(),它产生了namedtuples,并且看起来更有希望,但是我一直找不到令人满意的解决方案。

广晃

您可以使用两个groupby来做:

df1 = (df.groupby(['ID','YEAR'])['P1']
         .nunique()
         .reset_index(name='Number of Unique P1')
      )

df2 = (df.groupby('YEAR')['P1']
         .nunique()
         .reset_index(name='Number of Unique P1')
      )

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章