当前位置: 首页 > 面试题库 >

pandas通过对数据帧的操作进行分组

耿弘阔
2023-03-14
问题内容

我有一个像下面这样的熊猫数据框。

UsrId   JobNos
 1       4
 1       56
 2       23 
 2       55
 2       41
 2       5
 3       78
 1       25
 3       1

我根据基于UsrId的数据框进行分组。分组的数据框在概念上将如下所示。

UsrId   JobNos
  1    [4,56,25]
  2    [23,55,41,5]
  3    [78,1]

现在,我正在寻找一个内置API,该API将为我提供具有最大作业数的UsrId。对于上面的示例,UsrId-2具有最大计数。

更新: 我想要最大作业数的’n’UserIds,而不是最大作业数的UsrID。对于上面的示例,如果n = 2,则输出为[2,1]。能做到吗?


问题答案:

喜欢的东西df.groupby('UsrId').JobNos.sum().idxmax()应该这样做:

In [1]: import pandas as pd

In [2]: from StringIO import StringIO

In [3]: data = """UsrId   JobNos
   ...:  1       4
   ...:  1       56
   ...:  2       23 
   ...:  2       55
   ...:  2       41
   ...:  2       5
   ...:  3       78
   ...:  1       25
   ...:  3       1"""

In [4]: df = pd.read_csv(StringIO(data), sep='\s+')

In [5]: grouped = df.groupby('UsrId')

In [6]: grouped.JobNos.sum()
Out[6]: 
UsrId
1         85
2        124
3         79
Name: JobNos

In [7]: grouped.JobNos.sum().idxmax()
Out[7]: 2

如果要根据每个组中的项目数获得结果:

In [8]: grouped.size()
Out[8]: 
UsrId
1        3
2        4
3        2

In [9]: grouped.size().idxmax()
Out[9]: 2

更新: 要获得有序结果,可以使用以下.order方法:

In [10]: grouped.JobNos.sum().order(ascending=False)
Out[10]: 
UsrId
2        124
1         85
3         79
Name: JobNos


 类似资料:
  • 我有一个数据帧,我想按两个参数分组(1)相同的第一列中的连续编号和(2)第二列中的匹配值 数据帧: 组1包括前2行,因为30和31是连续的,第二列匹配。创建组2是因为Col1中的31和35不是连续的。创建组3是因为H和E不匹配。 在pandas groupby中对列表中的行进行分组 我很感谢你给我的建议

  • 我有一个pandas数据帧像: 我想按第一列进行分组,并将第二列作为行中的列表:

  • 我需要对pandas数据帧进行迭代,以便将每一行作为带有的函数(实际上是类构造函数)的参数传递。这意味着每一行都应该像字典一样,具有键、列名和值(每行对应的值)。

  • 问题内容: 我有一个这样的dataFrame,我想每60分钟进行一次分组,然后从06:30开始分组。 我在用: 我得到这个分组: 但我正在寻找这个结果: 我如何告诉该功能以6小时30分开始以一小时为间隔进行分组? 如果 .groupby(pd.TimeGrouper(freq =‘60Min’)) 无法完成此 操作 ,最好的方法是怎么做? 致敬并非常感谢 问题答案: 使用会同中的参数。 指定将使时

  • 我知道pandas的设计目的是加载完全填充的,但我需要创建一个空的DataFrame,然后逐个添加行。做这件事最好的方法是什么? 我成功创建了一个空DataFrame,其中包含: 然后我可以添加一个新行,并用以下内容填充字段: 它可以工作,但看起来很奇怪:-/(它不能添加字符串值) 我如何添加一个新的行到我的数据帧(不同的列类型)?

  • 我有一个熊猫数据框,如下所示。 我根据按数据帧分组。分组数据框在概念上如下所示。 现在,我正在寻找一个内置API,它将给我最大作业数的。对于上面的示例,-2具有最大计数。 更新:我希望具有最大作业计数,而不是具有最大作业计数的。对于上述示例,如果,则输出为。这能做到吗?