2017-06-18 4 views
0

私はgroupというデータフレームを持っています。これは、企業のレジストリの多くを含む:Python/Pandas - Whileループ - 特定の基準に従って2つのデータフレームを操作する

group: 

       Ratio      a 
companyid          
25    5.13271    1.18846e+06 
86    1.19454    2.29432e+09 
312   165.962     547000 
... 
316   6.77336    3.9294e+07 
330   3.56741    4.8953e+07 
405  0.000429348    2.32911e+06 

私はgroupで最大のaと10社の企業と新しいデータフレームを作成します。そのために私は次のように使用しています:

pdf=group.sort('a',ascending=False)[:10].astype(object) 

それは私に次のデータフレームを取得:このデータフレームは、内部の10社があり、それが10しかし、私だけでとどまるべきであること

pdf: 

       Ratio      a 
companyid          
2844   0.782216    4.34118e+09 
86    1.19454    2.29432e+09 
2177   0.0386724    8.6625e+08 
1407   2.08113    3.84293e+08 
3094   1.25491    3.3353e+08 
1099   0.671924    2.6757e+08 
877   0.443107    6.20865e+07 
330   3.56741    4.8953e+07 
1147   16.9933    3.9313e+07 
316   6.77336    3.9294e+07 

は注意をRatioが-3.95〜6.40の範囲にある企業に数えたいと思っています。そして私はそれをdinamicallyする必要があります。だから、私がしなければならないこと:Ratioが範囲外(この場合、1147と316は範囲外です)の会社があるかどうかを確認し、 pdf:そのために

私は次のように使用していますし、それがOK取り組んでいる:

for i in pdf['Ratio']: 
    if i>6.40: 
     b=i 
     position=(pdf['Ratio'][pdf['Ratio'] == b]).index 
     print(position[0]) 
     pdf=pd.DataFrame.drop(pdf, position[0]) 

    if i<-3.95: #check the ones over max and exclude them 
     position=(pdf['Ratio'][pdf['Ratio'] == i]).index 
     print(position[0]) 
     pdf=pd.DataFrame.drop(pdf, position[0]) 

b)参照)、最大から最小まで(aの順に、「グループ」の次の会社を挿入し、 pdfには再び10社が含まれています。

if 10-(len(pdf.index))>0: 
    select=(group).sort('a',ascending=False)[10:10+10-(len(pdf.index))].astype(object) 
    pdf=pd.concat((pdf,select)) 

問題は、この相互作用の後、私は新しい企業が再び6.40と-3.95の範囲にRatioであるかどうかを確認する必要があるということです:[OK]を、私はそれを行うことができます。そして、範囲外の会社があれば、私はそれを取り出して、次のものをラインに入れなければなりません。それらの次のもののどれかが範囲外であるなら、私はそれを何度も何度もやらなければならないでしょう。私はそれがwhileループのものかもしれないと思うが、私はかなり初心者であり、私はwhileをよく使うことに慣れていない。誰かがそれに光を当てることができますか?

答えて

1

おそらく私はあなたを誤解しているかもしれませんが、あなたの10の最も大きな値を取る前に、すべての無効率の行を除外しても大丈夫でしょうか?

操作を行います。

valid_ratios = group.query('Ratio > -3.95 & Ratio < 6.40') 

あなたが使用する前に:あなたの助け@Max電源用

pdf=valid_ratios.sort('a',ascending=False)[:10].astype(object) 
+0

感謝を!実際にあなたは誤解していませんでした。私が行っていたやり方は、何千倍も複雑です。啓発に感謝します! – abutremutante

関連する問題