簡體   English   中英

滿足條件時跳出“嵌套循環”,然后繼續父循環的循環

[英]Break out of the 'nested loop' when condition is met, and then continue the loop of the parent loop

我有一個嵌套循環,但我只需要子循環的第一個條件。 所以我需要子循環在滿足條件時停止,並為父循環的索引重新啟動循環。 這個例子應該澄清。 我有 dataframe 的前幾行:

    M#  Date    Time    Day Team    Team2   Venue   Team3   days_between1   next_game1
26  27  2021-05-01  7.30 pm Sat MI  CSK Delhi   MI CSK  0   0
27  28  2021-05-02  3.30 pm Sun RR  SRH Delhi   RR SRH  0   0
28  29  2021-05-02  7.30 pm Sun PK  DC  Ahmedabad   PK DC   0   0
29  30  2021-05-03  7.30 pm Mon KKR RCB Ahmedabad   KKR RCB 0   0
30  31  2021-05-04  7.30 pm Tue SRH MI  Delhi   SRH MI  0   0
31  32  2021-05-05  7.30 pm Wed RR  CSK Delhi   RR CSK  0   0
32  33  2021-05-06  7.30 pm Thur    RCB PK  Ahmedabad   RCB PK  0   0
33  34  2021-05-07  7.30 pm Fri SRH CSK Delhi   SRH CSK 0   0
34  35  2021-05-08  3.30 pm Sat KKR DC  Ahmedabad   KKR DC  0   0

我正在嘗試計算特定球隊比賽之間的天數。 例如,MI 在第一個和第四個播放。 我創建了一個列“Team3”,其中包含兩支球隊的名稱,以便更輕松地設置條件。 這是我的嘗試:

for i in range(26, df.last_valid_index()):
  a = df['Team'][i]
  for j in range(i,df.last_valid_index()):
    t = df['Team3'][j]
    if t.find(a) != -1:
      df['days_between1'][i] = df['Date'][j] - df['Date'][i]

結果應如下所示:

    M#  Date    Time    Day Team    Team2   Venue   Team3   days_between1   next_game1
26  27  2021-05-01  7.30 pm Sat MI  CSK Delhi   MI CSK  3   0
27  28  2021-05-02  3.30 pm Sun RR  SRH Delhi   RR SRH  3   0
28  29  2021-05-02  7.30 pm Sun PK  DC  Ahmedabad   PK DC   3   0
29  30  2021-05-03  7.30 pm Mon KKR RCB Ahmedabad   KKR RCB 3   0
30  31  2021-05-04  7.30 pm Tue SRH MI  Delhi   SRH MI  1   0
31  32  2021-05-05  7.30 pm Wed RR  CSK Delhi   RR CSK  NA  0
32  33  2021-05-06  7.30 pm Thur    RCB PK  Ahmedabad   RCB PK  NA  0
33  34  2021-05-07  7.30 pm Fri SRH CSK Delhi   SRH CSK NA  0
34  35  2021-05-08  3.30 pm Sat KKR DC  Ahmedabad   KKR DC  NA  0

您可以將循環移動到DataFrame.apply()中。

找到與給定team匹配的first_valid_index()並從team的日期中減去匹配的日期:

def between(row):
    index, team = row.name, row.Team
    mask = df[['Team', 'Team2']].loc[index+1:] == team
    match = mask.replace(False, np.nan).first_valid_index()
    return df.loc[match, 'Date'] - df.loc[index, 'Date'] if match else np.nan

df.days_between1 = df.apply(between, axis=1)

#     M#  Date        Time     Day   Team  Team2  Venue      Team3    days_between1  next_game1
# 26  27  2021-05-01  7.30 pm  Sat   MI    CSK    Delhi      MI CSK   3 days         0
# 27  28  2021-05-02  3.30 pm  Sun   RR    SRH    Delhi      RR SRH   3 days         0
# 28  29  2021-05-02  7.30 pm  Sun   PK    DC     Ahmedabad  PK DC    4 days         0
# 29  30  2021-05-03  7.30 pm  Mon   KKR   RCB    Ahmedabad  KKR RCB  5 days         0
# 30  31  2021-05-04  7.30 pm  Tue   SRH   MI     Delhi      SRH MI   3 days         0
# 31  32  2021-05-05  7.30 pm  Wed   RR    CSK    Delhi      RR CSK   NaT            0
# 32  33  2021-05-06  7.30 pm  Thur  RCB   PK     Ahmedabad  RCB PK   NaT            0
# 33  34  2021-05-07  7.30 pm  Fri   SRH   CSK    Delhi      SRH CSK  NaT            0
# 34  35  2021-05-08  3.30 pm  Sat   KKR   DC     Ahmedabad  KKR DC   NaT            0

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM