Это то, что вы ищете:
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