Skip to main content
 首页 » 编程设计

python之Pandas之创建一个包含前一列聚合的新列

2025年05月04日19虾米哥

我有一个包含 2 列的数据框:

CLASS   STUDENT 
'Sci'   'Francy' 
'math'  'Alex' 
'math'  'Arthur' 
'math'  'Katy' 
'eng'   'Jack' 
'eng'   'Paul' 
'eng'   'Francy' 
 

我想添加一个包含“数学”类所有学生的新列

CLASS   STUDENT  NEW_COL 
'Sci'   'Francy'   NaN 
'math'  'Alex'    'Alex', 'Arthur, Katy' 
'math'  'Arthur'  'Alex', 'Arthur, Katy' 
'math'  'Katy'    'Alex', 'Arthur, Katy' 
'eng'   'Jack'     NaN 
'eng'   'Paul'     NaN 
'eng'   'Francy'   NaN 
 

我一直在尝试这样的事情,但我并没有走得太远:

def get_all_students(class_series, df): 
    return df.groupby(['CLASS','STUDENT']).size().rest_index()['CLASS'== measurement].tolist() 
    ... 
 
df['NEW_COL'] = np.where(df['CLASS']=='math', get_all_students(df['CLASS'],df),np.NaN) 

请您参考如下方法:

IIUC 使用条件分配 groupby + transform

df.loc[df.CLASS=='math','New']=df.groupby('CLASS').STUDENT.transform(','.join) 
df 
Out[290]:  
  CLASS STUDENT               New 
0   Sci  Francy               NaN 
1  math    Alex  Alex,Arthur,Katy 
2  math  Arthur  Alex,Arthur,Katy 
3  math    Katy  Alex,Arthur,Katy 
4   eng    Jack               NaN 
5   eng    Paul               NaN 
6   eng  Francy               NaN 

更多信息,因为我通过 groupby 计算所有组,因此您可以将它们全部分配或只选择您需要的条件分配

df.groupby('CLASS').STUDENT.transform(','.join) 
Out[291]:  
0              Francy 
1    Alex,Arthur,Katy 
2    Alex,Arthur,Katy 
3    Alex,Arthur,Katy 
4    Jack,Paul,Francy 
5    Jack,Paul,Francy 
6    Jack,Paul,Francy 
Name: STUDENT, dtype: object