Как создать Dataframe на основе двух столбцов с расчетом? - PullRequest
1 голос
/ 25 марта 2019

Я пытаюсь создать DataFrame на основе значений двух столбцов еще 2 DataFrames.

Я хочу, чтобы новый DataFrame составлял долю значения одного из столбцов (b) между всеми значениями в другом столбце (a) на основе их взвешенного вклада в этот столбец (a).

На данный момент мне удалось решить это с помощью цикла. Но мне было интересно, можете ли вы вспомнить какую-либо векторизованную функцию от панд, которая могла бы решить эту проблему быстрее?

a = pd.DataFrame(np.random.randint(1, 6, 700))
b = pd.DataFrame(np.random.randint(1, 6, 400))*1000

final_share = []

weight = a/a.sum()

for index, value in b.iterrows():
    weighted_value = weight*b.iloc[index].item()
    final_share.append(weighted_value)

final_share = pd.concat(final_share, axis = 1)
final_share.columns = b.index

Ответы [ 2 ]

2 голосов
/ 25 марта 2019

Это элементарно с numpy.Вы хотите внешний продукт:

import numpy as np
final_share = pd.DataFrame(np.outer(b, weight).T)

Это будет намного быстрее.

Кредит это аном SOER

0 голосов
/ 25 марта 2019

Использование numpy:

arr = a[0].values 
w = arr / arr.sum()

c = pd.DataFrame(w[:, None] * b[0].values)

Или:

c = pd.DataFrame(np.outer(w, b[0].values))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...