Groupby按列计数,Groupby按列中另一列的唯一值的数目

2024-09-29 01:36:54 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个如下所示的数据框。它只有两列扇区,由。你知道吗


我的数据帧:

Sector     Raised_By        
A          Xavi
B          Ramos
C          Beckham
B          Ronaldo
A          Messi
A          Messi
C          Oven
B          Ramos
C          Ronaldo
A          Messi
C          Ronaldo
C          Beckham

从上面的数据框中,我想准备如下所示的数据框。你知道吗


预期输出:

Sector  Total_Number_of_Times_Raised  Number_unique_Raised_By    Unique_Raised_By
A       4                             2                         ['Xavi', 'Messi']
B       3                             2                        ['Ramos', 'Ronaldo']
C       5                             3                      ['Beckham', 'Ronaldo', 'Oven']

我试着遵循代码

c = df.groupby(['Sector']).size().reset_index(name='Total_Number_of_Times_Raised').sort_values(['Total_Number_of_Times_Raised'], 
                    ascending =False)

Tags: of数据numberbytotalsectortimes扇区
3条回答

至少在版本0.25中,将agg与字典一起使用(如在另一个版本中 答案),结果是一个警告:未来警告:在序列上使用dict for aggregation已弃用,将在将来的版本中删除。你知道吗

更现代的解决方案是使用命名聚合

df.groupby('Sector').Raised_By.agg(
    Total_Number_of_Times_Raised='count',
    Number_unique_Raised_By='nunique',
    Unique_Raised_By='unique').reset_index()

一个选项是^{}指定不同的aggfuncs

df.pivot_table(index=df.Sector, values='Raised_By', aggfunc=['count', 'nunique', set])

           count   nunique                           set
       Raised_By Raised_By                     Raised_By
Sector                                                     
A              4         2                 {Messi, Xavi}
B              3         2              {Ramos, Ronaldo}
C              5         3      {Oven, Ronaldo, Beckham} 

您可以使用pandas.Series.aggregate

df.groupby('Sector')['Raised_By'].agg({'Total_Number_of_Times_Raised':'count','Number_unique_Raised_By':'nunique','Unique_Raised_By':'unique'}).reset_index()

输出:

  Sector  Total_Number_of_Times_Raised  Number_unique_Raised_By  Unique_Raised_By 
0      A                             4                        2  [Xavi, Messi]  
1      B                             3                        2  [Ramos, Ronaldo] 
2      C                             5                        3  [Beckham, Oven, Ronaldo]

注: 您可以在结尾使用或不使用reset_index

相关问题 更多 >