2016-08-28 124 views
1
import pandas as pd 

df= pd.DataFrame({'date':[1,2,3,4,5,1,2,3,4,5,1,2,3,4,5], 
    'name':list('aaaaabbbbbccccc'), 
    'v1':[10,20,30,40,50,10,20,30,40,50,10,20,30,40,50], 
    'v2':[10,20,30,40,50,10,20,30,40,50,10,20,30,40,50], 
    'v3':[10,20,30,40,50,10,20,30,40,50,10,20,30,40,50]}) 

a= list(set(list(df.name))) 
plus=[] 
for i in a: 
    sep=df[df.name==i] 
    sep2=sep[(sep.v1>=10)&(sep.v2>=20)&(sep.v3<=40)] 
    plus.append(sep2) 
result=pd.concat(plus) 
print(result) 

我知道这是不是一个很好的例子,无论如何,我怎样才能提取使用“GROUPBY”

我想通过名称分别处理数据。

它需要太长时间在一个大的数据

我如何可以提取使用“GROUPBY”数据?

即使功能是用来更好(def..apply ...)

df.groupby(['name'])(df['v1']>20) ... ????它不能工作...

回答

0

看你需要的数据集,我不认为你需要groupbydf,你可以简单地将其过滤:

In [112]: df.query('v1 >= 10 and v2 >= 20 and v3 <= 40') 
Out[112]: 
    date name v1 v2 v3 
1  2 a 20 20 20 
2  3 a 30 30 30 
3  4 a 40 40 40 
6  2 b 20 20 20 
7  3 b 30 30 30 
8  4 b 40 40 40 
11  2 c 20 20 20 
12  3 c 30 30 30 
13  4 c 40 40 40