[英]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.