微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

as_index = False时,groupby.first,groupby.nth,groupby.head有什么区别

如何解决as_index = False时,groupby.first,groupby.nth,groupby.head有什么区别

主要问题是您可能'np.nan'存储了字符串,而不是真正的null值。以下是这三个null值的不同处理方式:

样本数据:

import pandas as pd
df = pd.DataFrame({'A': [1,1,2,2,3,3], 'B': [None, '1', np.NaN, '2', 3, 4]})

first

这将返回每个组中的第一个非空值。奇怪的是它不会跳过None,尽管可以通过kwarg来实现dropna=True。因此, :

df.groupby('A', as_index=False).first()
#   A     B
#0  1  None
#1  2     2
#2  3     3

df.groupby('A', as_index=False).first(dropna=True)
#   A  B
#0  1  1
#1  2  2
#2  3  3

head(n)

返回组中的前n行。 。如果您给它的n行数超过了行数,它将返回该组中的所有行而不会抱怨:

df.groupby('A', as_index=False).head(1)
#   A     B
#0  1  None
#2  2   NaN
#4  3     3

df.groupby('A', as_index=False).head(200)
#   A     B
#0  1  None
#1  1     1
#2  2   NaN
#3  2     2
#4  3     3
#5  3     4

nth

这占用了nth行,因此 再次 。.nth(0)与相同.head(1),但用途不同。例如,如果您需要第0行和第2行,则很难做到.head(),而使用则容易.nth([0,2])。同样,它.head(10)比容易编写.nth(list(range(10))))

df.groupby('A', as_index=False).nth(0)
#   A     B
#0  1  None
#2  2   NaN
#4  3     3

nth支持删除具有任何空值的行,因此您可以使用它返回不包含任何空值的第一行,这与 .head()

df.groupby('A', as_index=False).nth(0, dropna='any')
#   A  B
#A      
#1  1  1
#2  2  2
#3  3  3

解决方法

编辑: 我在np.nan@ coldspeed,@ wen-ben,@
ALollz指出的字符串中犯的菜鸟错误。答案非常好,因此我不会删除此问题以保留这些答案。

原文:
我已经阅读了这个问题/答案[groupby.first()和groupby.head(1)有什么区别?

该答案说明差异在于处理NaN价值上。但是,当我打电话给groupbyas_index=False,他们俩都选择了NaN

此外,Pandas具有groupby.nth与和类似的功能head,并且first

有什么差异groupby.first(),groupby.nth(0),groupby.head(1)as_index=False

下面的例子:

In [448]: df
Out[448]:
   A       B
0  1  np.nan
1  1       4
2  1      14
3  2       8
4  2      19
5  2      12

In [449]: df.groupby('A',as_index=False).head(1)
Out[449]:
   A       B
0  1  np.nan
3  2       8

In [450]: df.groupby('A',as_index=False).first()
Out[450]:
   A       B
0  1  np.nan
1  2       8

In [451]: df.groupby('A',as_index=False).nth(0)
Out[451]:
   A       B
0  1  np.nan
3  2       8

我看到`firs()’重置了索引,而其他2则没有。除此之外,还有什么区别吗?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。