gpt4 book ai didi

python - 当 as_index=False 时,groupby.first、groupby.nth、groupby.head 之间有什么不同

转载 作者:太空宇宙 更新时间:2023-11-04 08:27:43 28 4
gpt4 key购买 nike

编辑: @coldspeed、@wen-ben、@ALollz 指出了我在字符串 np.nan 中犯的新手错误。答案很好,所以我不删除这个问题来保留那些答案。

原文:
我读过这个问题/答案 What's the difference between groupby.first() and groupby.head(1)?

该答案解释了差异在于处理 NaN 值。但是,当我用 as_index=False 调用 groupby 时,它们都选择 NaN 很好。

此外,Pandas 有 groupby.nth 功能与 headfirst

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 个没有。除此之外,还有什么区别吗?

最佳答案

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

示例数据:

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

第一个/最后一个

这将返回每个组中的第一个/最后一个非空值。奇怪的是它不会跳过 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

头(n)/尾(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

第n个

这采用了 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

关于python - 当 as_index=False 时,groupby.first、groupby.nth、groupby.head 之间有什么不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55583246/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com