首页 > 解决方案 > pandas groupby head() & tail() 没有获取正确的值

问题描述

我有一个如下的数据框

     id     s   e   sa  ea
0   AAA     2015-04-22  2015-11-11  2015-05-07  2018-09-28
1   AAA     2015-05-07  2018-09-28  2015-05-07  2018-09-28
2   BBB     1972-11-04  2019-08-01  2019-06-15  2019-12-31
3   BBB     2019-06-15  2019-12-31  2019-06-15  2019-12-31
4   CCC     2000-11-04  2005-11-04  2000-11-04  2019-01-01
5   CCC     2006-11-04  2019-01-01  2000-11-04  2019-01-01

当我groupby& 选择head(1)&tail(1)时,我得到错误的值

df1.groupby('id').head(1)

给我

    id  s   e   sa  ea
0   AAA     2015-05-07  2015-11-11  2015-05-07  2018-09-28
2   BBB     2019-06-15  2019-08-01  2019-06-15  2019-12-31
4   CCC     2000-11-04  2005-11-04  2000-11-04  2019-01-01

df1.groupby('id').tail(1)给我

     id     s   e   sa  ea
1   AAA     2015-05-07  2018-09-28  2015-05-07  2018-09-28
3   BBB     2019-06-15  2019-12-31  2019-06-15  2019-12-31
5   CCC     2000-11-04  2019-01-01  2000-11-04  2019-01-01

知道为什么会这样吗?甚至索引号都是正确的。只有一列的值似乎是错误的!!!

放一张图片来显示错误 在此处输入图像描述

标签: pandasgroup-by

解决方案


如果我理解正确,您应该使用first()andlast()而不是head()and tail()

>>> df1.groupby('id').first()
              s           e          sa          ea
id
AAA  2015-04-22  2015-11-11  2015-05-07  2018-09-28
BBB  1972-11-04  2019-08-01  2019-06-15  2019-12-31
CCC  2000-11-04  2005-11-04  2000-11-04  2019-01-01


>>> df1.groupby('id').last()
              s           e          sa          ea
id
AAA  2015-05-07  2018-09-28  2015-05-07  2018-09-28
BBB  2019-06-15  2019-12-31  2019-06-15  2019-12-31
CCC  2006-11-04  2019-01-01  2000-11-04  2019-01-01

推荐阅读