And*_* L. 4 python dataframe pandas pandas-groupby
编辑:我在 @coldspeed、@wen-ben、@ALollz 指出的字符串中犯的菜鸟错误。np.nan答案非常好,所以我不会删除这个问题来保留这些答案。
原文:
我已阅读此问题/答案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
Run Code Online (Sandbox Code Playgroud)
我看到 `first()' 重置了索引,而其他 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]})
Run Code Online (Sandbox Code Playgroud)
first/last这将返回每个组中的第一个/最后一个非空值。奇怪的是它不会跳过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
Run Code Online (Sandbox Code Playgroud)
head(n)/tail(n)返回组内的前/后 n 行。值仍然绑定在 rows 内。如果你给它一个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
Run Code Online (Sandbox Code Playgroud)
nth这将获取nthrow ,因此值再次保留在 row 内。.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
Run Code Online (Sandbox Code Playgroud)
nth还支持删除具有任何空值的行,因此您可以使用它返回没有任何空值的第一行,这与.head()
df.groupby('A', as_index=False).nth(0, dropna='any')
# A B
#A
#1 1 1
#2 2 2
#3 3 3
Run Code Online (Sandbox Code Playgroud)