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

发布于 2021-01-29 14:11:04

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

考虑数据框 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我所期望的。

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

关注者
0
被浏览
122
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    一种选择是使用该.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



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看