首页 > 解决方案 > 优化python代码以快速获得结果

问题描述

我会优化我的代码

我正在尝试通过仅更改列“值”的值并保留其他列的值来从我的 DataFrame 先前值创建新行。

我不知道这样做是否好“ tmp_df[:1]['Value']”因为许多数据需要很长时间。

我只发现了这种方式。如果您有优化的想法:

import random
import pandas as pd
import numpy as np

d = {'WorkerId': [1, 2] ,'Value': [3, 4,],'WeekDay':['a','b']}
df = pd.DataFrame(data=d)


Listweek=['a','b'] #my week list 
WorkerIdList=[1,2] # my worker ID

#creating a DataFrame with the same column name as df
df2 = pd.DataFrame(columns=df.columns) 


for workerid in WorkerIdList:
    for week in Listweek:

            if(not df[ (df.WeekDay==week)].empty):   

                # I am taking the first row because I want to keep some value
                tmp_df=df[ (df.WeekDay==week)][:1]  

                #Then I change a the value on the column "Value"
                tmp_df[:1]['Value']= df[(df['WorkerId']==workerid)]['Value'].iloc[0] + random.randint(1, 10) 

                #I am doing concatenation
                frames = [df2, tmp_df[:1]]
                df2 = pd.concat(frames)
df2 

输出:在此处输入图像描述

标签: pythonpandas

解决方案


因为不清楚你到底想要什么,我唯一能给你的就是

df2=df.copy() 
df2.Value=df2.Value+random.randint(1,10)

将给出类似的结果而不声明

Listweek=['a','b'] #my week list 


WorkerIdList=[1,2] # my worker ID

推荐阅读