我发布此消息是因为该主题刚刚在另一个问题/答案中提出,并且该行为没有得到很好的记录。
考虑数据框 df
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'。
'A'
我试过了
df.groupby('A').B.agg(['first', 'last']) first last A x 1.0 2.0 y 3.0 4.0
但是,这并没有给我np.NaN我所期望的。
np.NaN
如何获得每个组中的实际第一个和最后一个值?
一种选择是使用该.nth方法:
.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
>>> 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
gb.B
.squeeze