簡體   English   中英

嵌套循環的替代方法

[英]Alternative to nested loop

我有一個任務是通過使用嵌套的 For 循環完成的。 我想知道是否可以在沒有循環的情況下以更類似於 python 的方式完成同樣的工作。 進一步來說; 我必須填充以下數據框

指數 美國國家橄欖球聯盟 NBA 非霍奇金淋巴瘤 美國職棒大聯盟
美國國家橄欖球聯盟 p 值 p 值 p 值 p 值
NBA p 值 p 值 p 值 p 值
非霍奇金淋巴瘤 p 值 p 值 p 值 p 值
美國職棒大聯盟 p 值 p 值 p 值 p 值

其中 p val 是來自“W/L 比率”的 stats.ttest_rel() 方法的 p 值。 傳遞給 ttest 的列來自 4 個數據幀 - 一個 dataframe 用於上述每個聯賽(其中包含所述“W/L 比率”列和一個區域列。區域列是數據幀之間的公共鍵。示例如下;

指數 地區 寬長比
0 波士頓 0.66
1個 丹佛 0.55

我想將運動組合中的 W/L 比率列傳遞給測試,以便一個地區在這兩種運動中都有團隊。

我通過執行以下代碼來做到這一點

`

sport = [merge_nfl,merge_nba,merge_nhl,merge_mlb] # our league dataframes in a list
sports = ['NFL', 'NBA', 'NHL', 'MLB']
p_values = pd.DataFrame({k:np.nan for k in sports}, index=sports)
for i in range(4):
    for j in range(4):
        merge_df_final = pd.merge(sport[i],sport[j],how='inner',left_on='Metropolitan area', right_on='Metropolitan area')
        p_values.iloc[i,j] = stats.ttest_rel(merge_df_final.iloc[:,1],merge_df_final.iloc[:,2])[1]

我想知道如果不使用嵌套循環我是否可以獲得相同的結果。

您可以為此使用產品模塊

from itertools import product

for i,j in product(range(4),range(4)):
    merge_df_final = pd.merge(sport[i],sport[j],how='inner',left_on='Metropolitan 
    area', right_on='Metropolitan area')
    p_values.iloc[i,j] = 
    stats.ttest_rel(merge_df_final.iloc[:,1],merge_df_final.iloc[:,2])[1]

暫無
暫無

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

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