weixin_53929854 2022-06-30 03:59 采纳率: 100%
浏览 139
已结题

python简化for loop

问题遇到的现象和发生背景

我想简化for loop

问题相关代码,请勿粘贴截图

import pandas as pd
import random

df_norms = pd.DataFrame()
df = pd.DataFrame({'Individual_Scale' : ['Scale A','Scale B','Scale C','Scale D','Scale E','Scale F'],
'Score' : [random.random()*100 for _ in range(6)]})

for scale in ['Scale A','Scale B','Scale C','Scale D','Scale E','Scale F']:
df_norms[scale] = sorted([random.random()*100 for _ in range(100)])
df = df.append(pd.Series([scale,random.random()*100], index = df.columns), ignore_index=True)

df_norms = df_norms.T.reset_index()
df_norms = df_norms.round(2)
df_norms

简化下面的for loop
def assesment_function(df,df_norms):
perc = []

for i in range(len(df)):
    for j in range(len(df_norms)):
        if df['Individual_Scale'][i] == df_norms.iloc[j,0]:
            k=1
            while df['Score'][i] >= df_norms.iloc[j,k]:
                if k == 100:
                    break
                else:
                    k += 1
            perc.append(k-1)
df['assesment'] = perc
return df

assesment_function(df,df_norms)

我想要达到的结果

img

  • 写回答

6条回答 默认 最新

  • 於黾 2022-06-30 08:09
    关注

    最外面两层for没法简化,你就是需要三层for
    但是中间的while可以简化

    #原始代码
    k=1
    while df['Score'][i] >= df_norms.iloc[j,k]:
        if k == 100:
            break
        else:
            k += 1
    perc.append(k-1)
    
    #简化后的代码
    for k in range(1,101):
        if df['Score'][i] < df_norms.iloc[j,k]:
            perc.append(k)
            break
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(5条)

报告相同问题?

问题事件

  • 系统已结题 7月15日
  • 已采纳回答 7月7日
  • 赞助了问题酬金50元 6月30日
  • 修改了问题 6月30日
  • 展开全部