Вес нескольких столбцов в зависимости от ряда факторов - PullRequest
0 голосов
/ 04 декабря 2018

У меня есть датафрейм, df, с 3 столбцами.A, B и C. Я хочу создать средневзвешенный столбец, но протестировать разные веса (веса должны быть равны 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

Однакоколичество столбцов может измениться на большее.Поэтому этот метод перестанет работать.

Может кто-нибудь увидеть умный способ сделать это?

1 Ответ

0 голосов
/ 04 декабря 2018

Это то, что вы ищете:

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...