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

为什么不按组别的第一和最后一个给我第一和最后一个

萧展鹏
2023-03-14
问题内容

我发布此消息是因为该主题刚刚在另一个问题/答案中提出,并且该行为没有得到很好的记录。

考虑数据df

df = pd.DataFrame(dict(
    A=list('xxxyyy'),
    B=[np.nan, 1, 2, 3, 4, np.nan]
))

   A    B
0  x  NaN
1  x  1.0
2  x  2.0
3  y  3.0
4  y  4.0
5  y  NaN

我想获取由column定义的每个组的第一行和最后一行'A'

我试过了

df.groupby('A').B.agg(['first', 'last'])

   first  last
A             
x    1.0   2.0
y    3.0   4.0

但是,这并没有给我np.NaN我所期望的。

如何获得每个组中的实际第一个和最后一个值?


问题答案:

一种选择是使用该.nth方法:

>>> gb = df.groupby('A')
>>> gb.nth(0)
     B
A
x  NaN
y  3.0
>>> gb.nth(-1)
     B
A
x  2.0
y  NaN
>>>

但是,我还没有找到一种将它们整齐地聚合的方法。当然,总是可以使用pd.DataFrame构造函数:

>>> pd.DataFrame({'first':gb.B.nth(0), 'last':gb.B.nth(-1)})
   first  last
A
x    NaN   2.0
y    3.0   NaN

注意:我明确使用了该gb.B属性,否则您必须使用.squeeze



 类似资料:
  • 问题内容: 我有以下形式的查询: 我很难确定上个季度的正确日期。因此,假设当前日期是 7月1日 ,即第三季度,我想将 4月1日 作为FIRST,将 6月30日 作为最后 一个季度 (即第二季度)的最后一天。 谷歌搜索了一下,找到了很多解决方案,但是每个解决方案都涵盖了SQL Server和可用的时髦方法,在我们的ORACLE数据库(Oracle 10g和11g)上不可用。 哦,是的,我还需要能够将

  • 本文向大家介绍JavaScript数组中的第一个元素和最后一个元素?,包括了JavaScript数组中的第一个元素和最后一个元素?的使用技巧和注意事项,需要的朋友参考一下 数组是一组元素。每个元素都有其自己的 索引值。我们可以使用这些索引访问任何元素。但是,对于最后一个元素,直到知道数组中存在的元素数量,我们才知道索引。在这种情况下,我们必须使用逻辑。让我们简要地讨论这些细节。 访问第一个元素 因

  • 下面代码中编写的方法需要取整数以及整数中第一位和最后一位的结果和。 注意:虽然我知道正确的解决方案,但我问这个问题的原因是我需要了解为什么我的代码不起作用,因为这使我成为一名更好的程序员,请帮助。 在上面的代码中,如果我在if块之后保持number/=10,如下所示 然后我的代码给出了正确的结果。例如,如果我在方法中输入121,因为第一个数字是1,第二个数字是1,那么它将两者相加,并给出结果2。这

  • 我使用的是Apache Spark,它的数据帧如下所示: 我想按字段分组,以获得的所有历元时间戳。然后我想按时间戳升序对历代进行排序,然后取第一个和最后一个历代。 我使用了下面的查询,但是和历元值似乎是按照它们在原始数据帧中出现的顺序获取的。我想把第一个和最后一个从一个有序的升序中取出来。 如何从按升序历元排序的历元列表中检索第一个和最后一个历元?

  • 我试图解析全名,将其读作名字、中间名、姓氏和后缀。我已经尝试了半段SQL代码,但我需要帮助根据以下逻辑获取后缀。 如果没有后缀,则留下字段NULL如果没有中间名,则留下字段NULL ,Ltrim(子字符串(名称,1,Isnull(Nullif(CHARINDEX(“”,NAME),0),1000))作为FirstName,Ltrim(子字符串(名称,CHARINDEX(“”,NAME),CASE

  • 问题内容: 从第n个组中选择单个记录/值的最简单方法是什么?该组由物料及其价格确定(价格可以更改)。我需要找到最后一个物料的最后一个日期和最后一个物料价格组的最后一个日期。所以我想知道什么时候确切的价格改变了。 我试过下面的查询以获取当前(最后)价格的第一个日期,如果以前使用过该价格,则该日期可能会返回错误的日期: 这也只会返回最后一个,我该如何获取以前的?那么,上一个/第一个使用前一个价格的日期