私はパンダにはかなり新しいです。Pandas for loop replacement
私は、データフレーム上で行ごとにループを繰り返すためにパンダを使用しようとしています。各行について、その行を別のデータフレームのすべての行(約len 7)と比較したいと考えています。
データフレームは非常に大きいです(インデックスは10月から10月まで10分です)。入れ子になっているforループでは、実行するには年齢がかかります(約20分)。パンダと明らかに
frame['Group1 ON With Exception'] = ''
for i in range(len(frame)):
for j in range(len(grp1_extpn_tbl)):
if ((frame.ix[i,'T01\n(kWh) ':'T22\n(kWh) ']>1) == (grp1_extpn_tbl.loc[j]>0)).all():
frame.ix[i,'Group1 ON With Exception'] = ''
break
else:
frame.ix[i,'Group1 ON With Exception'] = 'NOT VALID GROUP1 DATA'
かなり(3minsのようなもの)物事をスピードアップされ、キーは、ループを回避することですので、私は、ネストされたnp.where年代を使用してが出ています。問題はかなり面倒なコードブロックに見えて、別の選択肢があるのか、それとももっと複雑なコードブロックになるのだろうかと疑問に思いましたか? ;
frame['Group1 ON With Exception'] = ''
frame['Group1 ON With Exception'] = np.where((frame.loc[:,'T01\n(kWh) ':'T22\n(kWh) ']).apply(lambda x: ((x>1) == (grp1_extpn_tbl.loc[0] > 0)).all(), axis=1),'',
np.where((frame.loc[:,'T01\n(kWh) ':'T22\n(kWh) ']).apply(lambda x: ((x>1) == (grp1_extpn_tbl.loc[1] > 0)).all(), axis=1),'',
np.where((frame.loc[:,'T01\n(kWh) ':'T22\n(kWh) ']).apply(lambda x: ((x>1) == (grp1_extpn_tbl.loc[2] > 0)).all(), axis=1),'',
np.where((frame.loc[:,'T01\n(kWh) ':'T22\n(kWh) ']).apply(lambda x: ((x>1) == (grp1_extpn_tbl.loc[3] > 0)).all(), axis=1),'',
np.where((frame.loc[:,'T01\n(kWh) ':'T22\n(kWh) ']).apply(lambda x: ((x>1) == (grp1_extpn_tbl.loc[4] > 0)).all(), axis=1),'',
np.where((frame.loc[:,'T01\n(kWh) ':'T22\n(kWh) ']).apply(lambda x: ((x>1) == (grp1_extpn_tbl.loc[5] > 0)).all(), axis=1),'',
np.where((frame.loc[:,'T01\n(kWh) ':'T22\n(kWh) ']).apply(lambda x: ((x>1) == (grp1_extpn_tbl.loc[6] > 0)).all(), axis=1),'','NOT VALID GROUP1 DATA')))))))
うまくいけば、上記の情報は十分ですが、どんな助けでも大歓迎です。
おかげで、代わりに私を使用しての
[良い再現性のあるパンダの例を作る方法](http://stackoverflow.com/questions/20109391/how-to-make-good-reproducible-pandas-examples)にチェックを入れ、[最小、完全、および検証可能な例](http://stackoverflow.com/help/mcve)を参照してください。 – jezrael