Python Groupby计数为一列,Groupby计数为表中另一列的唯一值的数目

Python Groupby计数为一列,Groupby计数为表中另一列的唯一值的数目,python,pandas,dataframe,pandas-groupby,Python,Pandas,Dataframe,Pandas Groupby,我有一个数据框,如下所示。它只有两列扇区,并由 我的数据帧: 从上面的数据框中,我想准备如下所示的数据框 预期产出: 我尝试了以下代码 c = df.groupby(['Sector']).size().reset_index(name='Total_Number_of_Times_Raised').sort_values(['Total_Number_of_Times_Raised'], ascending =False) 您可以使用: 输出:

我有一个数据框,如下所示。它只有两列扇区,并由

我的数据帧:

从上面的数据框中,我想准备如下所示的数据框

预期产出:

我尝试了以下代码

c = df.groupby(['Sector']).size().reset_index(name='Total_Number_of_Times_Raised').sort_values(['Total_Number_of_Times_Raised'], 
                    ascending =False)
您可以使用:

输出:

  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]
注: 您可以在末尾使用或不重置索引

您可以使用:

输出:

  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]
注: 您可以在末尾使用或不重置索引

一个选项是指定不同的aggfuncs

df.pivot_table(index=df.Sector, values='Raised_By', aggfunc=['count', 'nunique', set])
一个选项是指定不同的aggfuncs

df.pivot_table(index=df.Sector, values='Raised_By', aggfunc=['count', 'nunique', set])
至少在版本0.25中,agg与另一个版本一样与字典一起使用 回答,结果是一个警告:未来警告:在一个系列中使用dict for aggregation已弃用,将在将来的版本中删除

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

至少在版本0.25中,agg与另一个版本一样与字典一起使用 回答,结果是一个警告:未来警告:在一个系列中使用dict for aggregation已弃用,将在将来的版本中删除

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

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} 
df.groupby('Sector').Raised_By.agg(
    Total_Number_of_Times_Raised='count',
    Number_unique_Raised_By='nunique',
    Unique_Raised_By='unique').reset_index()