python - Pandas :选择每组中的前几行

标签 python pandas

我无法解决这个简单的问题,我在这里寻求帮助... 我有如下 DataFrame,我想选择每组 'a' 中的前两行

df = pd.DataFrame({'a':pd.Series(['NewYork','NewYork','NewYork','Washington','Washington','Texas','Texas','Texas','Texas']), 'b': np.arange(9)})

df
Out[152]: 
            a  b
0     NewYork  0
1     NewYork  1
2     NewYork  2
3  Washington  3
4  Washington  4
5       Texas  5
6       Texas  6
7       Texas  7
8       Texas  8

也就是说,我想要一个输出如下:

            a  b
0     NewYork  0
1     NewYork  1
2  Washington  3
3  Washington  4
4       Texas  5
5       Texas  6

非常感谢您的帮助。

最佳答案

在 pandas 0.13rc 中,您可以直接使用 head 执行此操作(即无需 reset_index):

In [11]: df.groupby('id', as_index=False).head(2)
Out[11]: 
    id   value
0    1   first
1    1  second
3    2   first
4    2  second
5    3   first
6    3   third
9    4  second
10   4   fifth
11   5   first
12   6   first
13   6  second
15   7  fourth
16   7   fifth

[13 rows x 2 columns]

注意:正确的索引,即使有这个小例子,这也比以前快得多(有或没有 reset_index):

# 0.13rc
In [21]: %timeit df.groupby('id', as_index=False).head(2)
1000 loops, best of 3: 279 µs per loop

# 0.12
In [21]: %timeit df.groupby('id', as_index=False).head(2)  # this didn't work correctly
1000 loops, best of 3: 1.76 ms per loop

In [22]: %timeit df.groupby('id').head(2).reset_index(drop=True)
1000 loops, best of 3: 1.82 ms per loop

关于python - Pandas :选择每组中的前几行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20693363/

相关文章:

python & pandas - 删除列值是另一个 DataFrame 中的索引值的行

Python 计算文本中的短语数

python - GCP 服务帐号跨项目角色和权限

python - 有机会让它更快吗? (numpy.einsum)

Python - OpenCV VideoCapture = False (Windows)

python - Haskell 的惰性是 Python 生成器的优雅替代品吗?

python - 用 Pandas 连接两列

python - 舍入系列时出错

python - 如何在python中对字典索引进行排序

python - 如何根据字母_和_数字对 Pandas 列进行排序?