2016-08-28 6 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) ... ????それは私があなたのdfgroupbyする必要はないと思います、ご希望のデータセットを見て...

答えて

0

を働かせることができない、あなたは単にそれをフィルタリングすることができます。

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