【问题标题】:Assign Unique Numeric Group IDs to Groups in Pandas [duplicate]为 Pandas 中的组分配唯一的数字组 ID [重复]
【发布时间】:2018-10-07 14:29:15
【问题描述】:

我一直遇到必须为数据集中的每个组分配唯一 ID 的问题。我在对 RNN 进行零填充、生成图表和许多其他场合时使用过它。

这通常可以通过连接每个pd.groupby 列中的值来完成。但是,通常情况下,定义组的列数、它们的 dtype 或值大小会使串联成为不必要地占用内存的不切实际的解决方案。

我想知道是否有一种简单的方法可以为 pandas 中的组分配唯一的数字 ID。

【问题讨论】:

    标签: python pandas pandas-groupby


    【解决方案1】:

    您只需要来自seeiespi(或pd.factorize)的ngroup 数据

    df.groupby('C').ngroup()
    Out[322]: 
    0    0
    1    0
    2    2
    3    1
    4    1
    5    1
    6    1
    7    2
    8    2
    dtype: int64
    

    更多选项

    pd.factorize(df.C)[0]
    Out[323]: array([0, 0, 1, 2, 2, 2, 2, 1, 1], dtype=int64)
    df.C.astype('category').cat.codes
    Out[324]: 
    0    0
    1    0
    2    2
    3    1
    4    1
    5    1
    6    1
    7    2
    8    2
    dtype: int8
    

    【讨论】:

    • 天哪!容易多了。感谢@Wen
    • @seeiespi yw :-)
    【解决方案2】:

    我管理了一个简单的解决方案,我经常参考并希望分享:

    df = pd.DataFrame({'A':[1,2,3,4,6,3,7,3,2],'B':[4,3,8,2,6,3,9,1,0], 'C':['a','a','c','b','b','b','b','c','c']})
    
    df = df.sort_values('C')
    
    df['gid'] = (df.groupby(['C']).cumcount()==0).astype(int)
    
    df['gid'] = df['gid'].cumsum()
    
    In [17]: df
    Out[17]:
       A  B  C  gid
    0  1  4  a    1
    1  2  3  a    1
    2  3  8  b    2
    3  4  2  b    2
    4  6  6  b    2
    5  3  3  b    2
    6  7  9  c    3
    7  3  1  c    3
    8  2  0  c    3
    

    【讨论】:

      猜你喜欢
      • 2019-11-20
      • 2017-12-18
      • 1970-01-01
      • 2014-06-03
      • 2017-01-31
      • 1970-01-01
      • 2018-10-05
      • 1970-01-01
      • 2023-02-18
      相关资源
      最近更新 更多