Python 按不同的因素范围对多个列进行加权

Python 按不同的因素范围对多个列进行加权,python,pandas,loops,Python,Pandas,Loops,我有一个数据帧,df,有3列。A、 我想创建一个加权平均列,但测试不同的权重需要等于100% 所以我能做到 weights =np.arange(0,1,0.05) if i+j+k=1: for i in weights: for j in weights: for k in weights: outname=str(i)+'A'+str(j)+'B'+str(k)+'C' df[outname]=df['A'].multiply(k)+df['B'].mul

我有一个数据帧,df,有3列。A、 我想创建一个加权平均列,但测试不同的权重需要等于100%

所以我能做到

weights  =np.arange(0,1,0.05)
if i+j+k=1:

for i in weights:
     for j in weights:
         for k in weights:
outname=str(i)+'A'+str(j)+'B'+str(k)+'C'

df[outname]=df['A'].multiply(k)+df['B'].multiply(i)+df['C'].multiply(j)
else:
    pass
但是,列的数量可能会更改为更大的数量。因此,此方法将停止工作


有人能想出一个聪明的方法吗?

这就是你想要的吗:

from random import randint
import pandas as pd

df = pd.DataFrame([[0,1,2],[3,4,5],[6,7,8]], columns=['A','B','C'])
weightpool = np.arange(0,1,0.05)
weights =  np.linspace(0, 0, num=df.columns.size)


for times in range(1,3):
    #all weights sum up to 1
    while weights.sum()!=1:
        #choose weights out of pool
        for i in range(len(weights)-1):
            weights[i] = weightpool[randint(0, len(weightpool)-1)]

    for i in range(len(weights)-1):
        outname =  outname + str(weights[i]) + df.columns[i]
        outvalue = df[df.columns[i]].multiply(weights[i])
        df[outname] = pd.Series(outvalue, index=df.index)

df

谢谢我想这会管用的。我对python非常陌生,所以我将尝试使用它