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

时间:2020-03-12 19:39:27

标签: python pandas dataframe

我有一个大约有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(),它产生了命名元组,并且看起来更有希望,但是我一直找不到令人满意的解决方案。

1 个答案:

答案 0 :(得分: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')
      )