2017-02-20 75 views
1

我有一個熊貓數據框。我想從數據幀的每個子組中提取一定數量的觀察值,並將它們放入新的數據幀中。例如,假設我們有以下數據框:從熊貓數據框中提取羣組觀察

  Var1 Var2 
    0  1  1.2 
    1  2  1.3 
    2  2  1.4 
    3  1  1.5 
    4  1  1.6 
    5  2  1.7 
    6  1  1.8 
    7  1  1.9 
    8  2  2.0 
    9  1  2.1 
    10  2  2.2 
    11  1  2.3 

我想VAR1先對它進行排序:

  Var1 Var2 
    0  1  1.2 
    1  1  1.5 
    2  1  1.6 
    3  1  1.8 
    4  1  1.9 
    5  1  2.1 
    6  1  2.3 
    7  2  1.3 
    8  2  1.4 
    9  2  1.7 
    10  2  2.0 
    11  2  2.2 

,然後保持各組的前兩個的意見,並把他們帶到一個新的dataframe:

  Var1 Var2 
    0  1  1.2 
    1  1  1.5 
    2  2  1.3 
    3  2  1.4 

我知道如何使用group by,但我不清楚如何執行第二步。非常感謝你的幫助。

回答

2

使用sort_valuesgroupbyhead

df = df.sort_values('Var1').groupby('Var1').head(2).reset_index(drop=True) 
print (df) 
    Var1 Var2 
0  1 1.2 
1  1 1.5 
2  2 1.3 
3  2 1.4 

df = df.groupby('Var1').head(2).sort_values('Var1').reset_index(drop=True) 
print (df) 
    Var1 Var2 
0  1 1.2 
1  1 1.5 
2  2 1.3 
3  2 1.4 

iloc另一種解決方案:

df = df.groupby('Var1')['Var2'] 
     .apply(lambda x: x.iloc[:2]) 
     .reset_index(level=1, drop=True) 
     .reset_index() 
print (df) 
    Var1 Var2 
0  1 1.2 
1  1 1.5 
2  2 1.3 
3  2 1.4 

注:

對於老版本的熊貓,sort_values更改爲sort,而是更新版本。

+0

非常感謝,它的工作原理與它應該完全一樣。只爲大熊貓用戶留言:使用'sort'而不是'sort_values'。 – user6566438