私は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
をよく使うことに慣れていない。誰かがそれに光を当てることができますか?
感謝を!実際にあなたは誤解していませんでした。私が行っていたやり方は、何千倍も複雑です。啓発に感謝します! – abutremutante