2013-12-19 8 views
4

이 간단한 문제를 해결할 수 없으며 여기에서 도움을 요청하고 있습니다 ... 다음과 같은 DataFrame이 있고 각각의 첫 번째 두 행을 선택하고 싶습니다팬더 : 각 그룹의 첫 번째 행을 두 개 선택하십시오.

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

덕분에 도움을 많이 : 다음과 같다 '는'

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 

그룹, 나는 출력을 할 수 있습니다.

답변

0

죄송합니다,

팬더 0.13rc에서
df.groupby('a').head(2).reset_index(drop=True) 
Out[165]: 
      a b 
0  NewYork 0 
1  NewYork 1 
2  Texas 5 
3  Texas 6 
4 Washington 3 
5 Washington 4 
4

, 당신은 (즉, 필요이 직접 사용하여 머리를 할 수 없다 ... Pandas dataframe get first row of each group 이제 알았어 ... 누군가가 전에 비슷한 질문을 것 같다 심지어이 작은 예로)의 올바른 지표를이 함께 또는없이 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하는

,369,136을3210
# 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 
관련 문제