2017-02-20 47 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