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

问题描述 投票:0回答:1

我有一个大约有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,并且看起来更有希望,但是我一直找不到令人满意的解决方案。

python pandas dataframe
1个回答
0
投票

您可以用两个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')
      )
© www.soinside.com 2019 - 2024. All rights reserved.