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

Pandas上的SQL“按组分组”的含义是什么?

储承
2023-03-14
问题内容

使用groupby并在熊猫中并行应用过滤器的最有效方法是什么?

基本上我要的是SQL中的等效项

select *
...
group by col_name
having condition

我认为有很多用例,包括条件均值,总和,条件概率等,这些条件会使该命令非常强大。

我需要一个非常好的性能,因此理想情况下,这样的命令将不是在python中完成的多个分层操作的结果。


问题答案:

如unutbu的评论中所述,groupby的过滤器等效于SQL的HAVING:

In [11]: df = pd.DataFrame([[1, 2], [1, 3], [5, 6]], columns=['A', 'B'])

In [12]: df
Out[12]:
   A  B
0  1  2
1  1  3
2  5  6

In [13]: g = df.groupby('A')  #  GROUP BY A

In [14]: g.filter(lambda x: len(x) > 1)  #  HAVING COUNT(*) > 1
Out[14]:
   A  B
0  1  2
1  1  3

您可以编写更复杂的函数(将这些函数应用于每个组),只要它们返回简单的布尔值即可:

In [15]: g.filter(lambda x: x['B'].sum() == 5)
Out[15]:
   A  B
0  1  2
1  1  3

注意:
可能存在一个错误
,即您无法编写函数来对过去用于分组的列进行操作…解决方法是手动对列进行分组g = df.groupby(df['A']))



 类似资料:
  • 问题内容: 我有一个这样的数据框: 我想计算每个集群每个组织的平均时间。 预期结果: 我不知道如何在熊猫中做到这一点,有人可以帮忙吗? 问题答案: 如果你想先对组合取平均值,然后再对cluster组取平均值 如果你不仅仅希望价值观,那么你可以 你可以groupby上再取

  • 问题内容: 我有以下几点: http://sqlfiddle.com/#!6/226ae/1 我现在尝试为一年中的每个星期添加一行,并相应地过滤联系人。CONTACTS有一个datetime列。新表将如下所示: 我认为需要使用DATEADD,但是在如何开始更改查询方面我迷茫了。 我确实知道MySQL具有GROUP BY WEEK命令,但我认为SQL没有等效的命令。做到这一点的最佳方法是什么? 问题

  • 问题内容: 我有这个数据框: 我想按名称和日期进行汇总以获取数量总和。详细信息: 日期 :组,结果应在星期初(或仅在星期一) 数量 :两个或多个记录具有相同的名称和日期(如果属于相同间隔)的总和 所需的输出如下: 提前致谢 问题答案: 首先转换列 并减去一个星期,因为我们要对日期之前一周进行累加,而不是该日期之前一周。 然后通过W-MON使用with并进行聚合:

  • 问题内容: 我有一个具有此架构的表 我正在尝试使查询工作显示每个月的总数。到目前为止,我已经尝试过DateDiff和嵌套选择,但都没有给我想要的东西。我认为这是最接近的: 但是当我应该获取值时,我只会得到空值。我想念什么吗? 问题答案: 您也可以尝试:

  • 问题内容: 我有一个用例,其中: 数据的格式为:Col1,Col2,Col3和时间戳。 现在,我只想获取行数与时间戳箱的数量。 也就是说,对于每半小时的存储桶(甚至没有对应行的存储桶),我需要计算有多少行。 时间戳记分布在一年内,因此我无法将其划分为24个存储桶。 我必须每隔30分钟将它们装箱。 问题答案: 通过

  • 问题内容: 我正在尝试返回一些在滚动12个月内分散的结果,例如: 如何在日期范围内分散结果,并在第一列中填充月份名称? 在MSSQL中,它将类似于: 但这是针对Oracle数据库的,因此DATEPART和DateTime不可用。 我的问题表大致为: 问题答案: 使用: 您还可以使用: