pandas.core.groupby.DataFrameGroupBy.nth#

property DataFrameGroupBy.nth[源代码]#

如果 n 是整数,则从每个组中取第 n 行,否则取行的子集。

可以是调用或索引。使用索引符号时,不能使用 dropna。索引符号接受逗号分隔的整数列表和切片。

如果 dropna,将取第 n 个非空行,dropna 可以是 ‘all’ 或 ‘any’;这等价于在 groupby 之前调用 dropna(how=dropna)。

参数:
nint, slice 或 int 和 slices 的列表

单个 nth 值用于行或一个 nth 值或切片的列表。

在 1.4.0 版本发生变更: 添加了切片和包含切片的列表。添加了索引表示法。

dropna{‘any’, ‘all’, None}, 默认 None

在计算哪一行是第 n 行之前应用指定的 dropna 操作。仅在 n 为整数时支持。

返回:
Series 或 DataFrame

每个组内的第N个值。

参见

Series.groupby

对一个Series应用一个groupby函数。

DataFrame.groupby

对DataFrame的每一行或每一列应用一个groupby函数。

示例

>>> df = pd.DataFrame(
...     {"A": [1, 1, 2, 1, 2], "B": [np.nan, 2, 3, 4, 5]}, columns=["A", "B"]
... )
>>> g = df.groupby("A")
>>> g.nth(0)
   A   B
0  1 NaN
2  2 3.0
>>> g.nth(1)
   A   B
1  1 2.0
4  2 5.0
>>> g.nth(-1)
   A   B
3  1 4.0
4  2 5.0
>>> g.nth([0, 1])
   A   B
0  1 NaN
1  1 2.0
2  2 3.0
4  2 5.0
>>> g.nth(slice(None, -1))
   A   B
0  1 NaN
1  1 2.0
2  2 3.0

索引符号也可以使用

>>> g.nth[0, 1]
   A   B
0  1 NaN
1  1 2.0
2  2 3.0
4  2 5.0
>>> g.nth[:-1]
   A   B
0  1 NaN
1  1 2.0
2  2 3.0

指定 dropna 允许忽略 NaN

>>> g.nth(0, dropna="any")
   A   B
1  1 2.0
2  2 3.0

当指定的 n 大于任何一组时,将返回一个空的 DataFrame

>>> g.nth(3, dropna="any")
Empty DataFrame
Columns: [A, B]
Index: []