如何解决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
价值上。但是,当我打电话给groupby
时as_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 举报,一经查实,本站将立刻删除。