Skip to main content
 首页 » 编程设计

python之根据其他列中唯一值的长度在 Pandas 中创建一个新列

2025年05月04日13lvdongjie

我有一个数据框如下:

df 
 
    id   val 
0    1   21 
1    2   35 
2    2   45 
3    3   55 
4    1   10 
5    4   90 
6    3   45 
7    2   78 
8    3   23 

我想根据 id 中每个值的长度创建一个新列 cat。

如果 len(id) <= 1 cat 中的值应该是 'A'

如果 len(id) < 3 值应该是 'B'

如果 len(id) >= 3 值应该是 'C'

预期输出:

    id   val   cat 
0    1   21     B 
1    2   35     C 
2    2   45     C 
3    3   55     C 
4    1   10     B 
5    4   90     A 
6    3   45     C 
7    2   78     C 
8    3   23     C 

我尝试过的:

def test(series): 
    if len(series) <= 1: 
        return 'A' 
    elif len(series) < 3: 
        return 'B' 
    else: 
        return 'C' 
 
 
df.groupby('id').apply(test) 

以上代码错误:

TypeError: 'DataFrame' objects are mutable, thus they cannot be hashed

请您参考如下方法:

您可以使用map、value_counts 和pd.cut:

 df['cat'] = df.id.map(pd.cut(df.id.value_counts(), 
                              bins=[0,1,2,np.inf], 
                              labels=['A','B','C'])) 

输出:

   id  val cat 
0   1   21   B 
1   2   35   C 
2   2   45   C 
3   3   55   C 
4   1   10   B 
5   4   90   A 
6   3   45   C 
7   2   78   C 
8   3   23   C