一尘不染

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

python

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

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

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


阅读 200

收藏
2021-01-20

共1个答案

一尘不染

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

2021-01-20