2016-08-28 5 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

глядя на нужный набор данных я не думаю, что вам нужно groupby ваши df, вы можете просто фильтровать:

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 
Смежные вопросы