【问题标题】:How to show individual names in a column according to the value of other column? Python如何根据其他列的值在列中显示单个名称? Python
【发布时间】:2021-08-24 10:55:15
【问题描述】:

我有这段代码,我首先整理出最短的处理时间。我使用 CSV 文件作为输入,其中有“TestCaseName”、“Average_processing_time”等数据列。使用 Average_processing_time 列,我首先对缩短最短处理时间进行排序。使用冒泡排序我得到了结果,但我还希望将测试用例名称放在与处理时间平行的单独列中。

目前测试用例名称按照 CSV(字母顺序)。但相反,我想要根据平均处理时间的测试用例名称。 这是我目前拥有的代码:-

          pt=[]     #pt stands for processing time

          n=int(df.TestCaseName.count())
          processes=[]
          for i in range(0,n):
                 processes.insert(i,i+1)

          pt=list(map(float, df["ProcessingTime"]))
          for i in range(0,len(pt)-1):  #applying bubble sort to sort process according to their processing time
             for j in range(0,len(pt)-i-1):
                   if(pt[j]>pt[j+1]):
                      temp=pt[j]
                      pt[j]=pt[j+1]
                      pt[j+1]=temp
                      temp=processes[j]
                      processes[j]=processes[j+1]
                      processes[j+1]=temp
             wt=[]    #wt stands for waiting time
             avgwt=0  #average of waiting time
             #tat=[]    #tat stands for turnaround time
             #avgtat=0   #average of total turnaround time
             wt.insert(0,0)
             #tat.insert(0,bt[0])
             for i in range(1,len(pt)):  
                  wt.insert(i,wt[i-1]+pt[i-1])
                  #tat.insert(i,wt[i]+bt[i])
                  avgwt+=wt[i]
                  #avgtat+=tat[i]
             avgwt=float(avgwt)/n
             #avgtat=float(avgtat)/n
             print("\n")
             print("Process\t\t Processing Time\t\t Waiting Time \t\t TestCaseName") #\t\t\t  
             Turn Around Time
             for i in range(0,n):
                  #  print('{} {} {} {}'.format(processes[i], df.TestCaseName[i], bt[i], 
                  wt[i])
                  #txt = "{0}, \t\t{1}, \t\t{2}, \t\t\t{3}".format(processes[i], bt[i], wt[i], 
                  df.TestCaseName[i] )
                  print(str(processes[i])+"\t\t"+str(pt[i])+"\t\t"+str(wt[i])+ 
                  "\t\t"+str(df.TestCaseName[i]))
                  #print(txt)
                  print("\n")
            print("Average Waiting time is: "+str(avgwt))
            #print("Average Turn Arount Time is: "+str(avgtat))

CSV structure & Output i am getting currently Picture

Output i want

【问题讨论】:

  • 由于你没有提供任何我可以测试的输入数据,我只能推测你没有按照你想要的方式组织数据的原因是你已经对处理时间进行了排序,但是没有同步调整 df 测试用例名称。如果您提供输入数据的样本,我可以进一步测试
  • @itprorh66 我提供了一张 CSV 结构的图片。如果你想要那个 CSV 文件,那么我不知道我是否可以在 stackoverflow 中上传一个 csv 文件。

标签: python python-3.x for-loop bubble-sort


【解决方案1】:

您可以使用以下方法轻松创建以下数据框:

import pandas as pd
pd.read_csv('Filename')

这会产生数据框:

    TestCase_Name   Avg_Proc_Time
  0    A            2
  1    B            6
  2    C            1
  3    D            7  

要对该框架进行排序,只需执行以下操作:

df.sort_values(by='Avg_Proc_Time')

产生所需的输出

    TestCase_Name   Avg_Proc_Time
2      C                1
0      A                2
1      B                6
3      D                7

【讨论】:

  • 是的,我知道这一点,但我实际上在这里实现了一个将实时使用的算法。我不能为此使用熊猫。这就是为什么我有这段代码,它使用最短作业优先的概念。
  • 如果您在最初的问题描述中包含这个小信息,那就太好了。我请您参考我最初的评论,在进行冒泡排序时,您需要将测试用例名称与处理时间联系起来,以便排序将名称和时间作为一对移动。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-09
  • 2020-07-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多