【问题标题】:Alternative to nested loop嵌套循环的替代方法
【发布时间】:2022-12-31 14:12:11
【问题描述】:

在这里编码的新手,如果问题没有很好地形成或之前已经回答,请提前道歉。 我有一个任务是通过使用嵌套的 For 循环完成的。我想知道是否可以在没有循环的情况下以更类似于 python 的方式完成同样的工作。进一步来说; 我必须填充以下数据框

Index NFL NBA NHL MLB
NFL p val p val p val p val
NBA p val p val p val p val
NHL p val p val p val p val
MLB p val p val p val p val

其中 p val 是来自“W/L 比率”的 stats.ttest_rel() 方法的 p 值。传递给 ttest 的列来自 4 个数据帧 - 上面每个联赛的一个数据帧(其中包含所述“W/L 比率”列和一个区域列。区域列是数据帧之间的公共键。示例如下;

Index region W/L Ratio
0 Boston 0.66
1 Denver 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]

我想知道是否可以在不使用嵌套循环的情况下获得相同的结果。

谢谢

【问题讨论】:

    标签: python pandas list-comprehension


    【解决方案1】:

    您可以像这样摆脱嵌套循环-

    for i, j in zip(range(4), range(4)):
        print(i, j)
    

    它的输出与

    for i in range(4):
        for j in range(4):
            print(i, j)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-05-25
      • 2013-08-23
      • 2023-02-05
      • 1970-01-01
      • 2017-09-03
      • 2015-06-29
      • 2018-04-15
      • 2020-12-22
      相关资源
      最近更新 更多