在一个函数中,一个数据帧也会奇怪地覆盖另一个数据帧((Pandas)

2024-09-29 21:37:25 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个函数,输入一个数据帧,作为一个结构。 我创建两个与该数据帧相等的本地数据帧,然后在两个不同的数据帧中输入不同的值,但是在函数的末尾,它们是相同的。 Python赋值的工作方式有问题吗

之前,我在两个单独的时刻调用了函数,分别输出两个数据帧,但有一些不同,它工作得很好。现在在Python中分配和内存的工作方式似乎有问题,所以我不知道如何使它工作。我只把代码部分放在这里,我认为问题发生的地方

def GeneraTabellaCovarianze(Fisso,Var):
    Gen=Fisso
    Gen1=Fisso

                        if Var=="DifAtt":
                            Pow1=Gen['ForzaDif'][a]*Gen['Dif'][a]/Gen['ForzaOff'][b]*Gen['Att'][b]
                            #print(Gen['Squadra'][a],Pow1)
                            Pow2=Gen['ForzaOff'][a]*Gen['Att'][a]/Gen['ForzaDif'][b]*Gen['Dif'][b]
                            #print(Gen['Squadra'][a],Pow2)
                            print(a,b,count)
                            Gen.at[a,count]=Pow1 #difensivo
                            Gen.at[b,count]=(1/Pow2) #difensivo

                            Gen1.at[a,count]=Pow2 #offensivo
                            Gen1.at[b,count]=(1/Pow1) #offensivo                          
            count=count+1

Gen=Gen.drop(['Squadra','Forza', 'Gen','Att','Dif','ForzaOff','ForzaDif','CostoPor'], axis=1)
Gen1=Gen1.drop(['Squadra','Forza', 'Gen','Att','Dif','ForzaOff','ForzaDif','CostoPor'], axis=1)
return(Gen,Cov,Gen1,Cov1)

(Dif,CovDif,Att,CovAtt)=GeneraTabellaCovarianze(Sq,'DifAtt')

我期望这两个数据帧是不同的,但它们总是相同的。 事先谢谢你的帮助


Tags: 数据函数countattatgenprintdif
1条回答
网友
1楼 · 发布于 2024-09-29 21:37:25

Gen和Gen1引用相同的数据。改变一个可以被另一个看到。您应该在Gen1=Fisso.copy()中调用copy(),以便它们变得独立:

def GeneraTabellaCovarianze(Fisso,Var):
    Gen=Fisso
    Gen1=Fisso.copy()

                        if Var=="DifAtt":
                            Pow1=Gen['ForzaDif'][a]*Gen['Dif'][a]/Gen['ForzaOff'][b]*Gen['Att'][b]
                            #print(Gen['Squadra'][a],Pow1)
                            Pow2=Gen['ForzaOff'][a]*Gen['Att'][a]/Gen['ForzaDif'][b]*Gen['Dif'][b]
                            #print(Gen['Squadra'][a],Pow2)
                            print(a,b,count)
                            Gen.at[a,count]=Pow1 #difensivo
                            Gen.at[b,count]=(1/Pow2) #difensivo

                            Gen1.at[a,count]=Pow2 #offensivo
                            Gen1.at[b,count]=(1/Pow1) #offensivo                          
            count=count+1

Gen=Gen.drop(['Squadra','Forza', 'Gen','Att','Dif','ForzaOff','ForzaDif','CostoPor'], axis=1)
Gen1=Gen1.drop(['Squadra','Forza', 'Gen','Att','Dif','ForzaOff','ForzaDif','CostoPor'], axis=1)
return(Gen,Cov,Gen1,Cov1)

(Dif,CovDif,Att,CovAtt)=GeneraTabellaCovarianze(Sq,'DifAtt')

相关问题 更多 >

    热门问题