私は、フォームのデータフレーム(df
)を持っている:Pythonでネストされた 'forループ'を避けるには?
SERV_OR_IOR_ID IMP_START_TIME IMP_CLR_TIME TIME_BIN
0 -1447310116 23:59:32.873000 00:11:28.755000
1 1673545041 00:00:09.182000 00:01:06.912000
2 -743717696 23:59:57.312000 00:00:32.428000
3 -746373244 23:59:57.915000 00:05:33.232000
私は30分の「時間ビン」への日の24時間を分割していますので、ゼロ番目の時間ビンは00から次のようになります00-00: 3030、最初は00:30-01:00以降です。これを記入して、'IMP_START_TIME'
が入っている時間ウィンドウに応じて、各行に'TIME_BIN'
列の値を割り当てたいとします。 例: '1'
の場合、の時間枠内にあるので、値'0'
を割り当てます。
interval = dt.timedelta(minutes=30)
start = dt.time(0,0,0)
grid =[(dt.datetime.combine(dt.date(1,1,1),start)+n*interval).time() for n in range(48)]
for j in range(len(df)):
for i in range(0,47):
if df.ix[j,1] <grid[i+1] and df.ix[j,1] > grid[i]:
df.ix[j,3] = i
elif df.ix[j,1] > grid[47]:
df.ix[j,3] = 47
このコードが原因でループの入れ子になったのを実行するために多くの時間をとります。このため
は、私は次のコードを書きました。同じことをするより効率的な方法がありますか?
インデントレベル –
を最小限に抑えるため、[ZIP](https://docs.python.org/2/library/functions.html#zip)を使用してあなただけまで追加することはできませんデータフレームの各行の時間と分を計算し、それを30で割りますか? 1:23 - > 83 - > 83/30 - > 2 –
@DanielFrühauf - ありがとう!それは働いた:) – Shreyas