вычислить формулу с суммой разностей одной строки со всеми остальными в pandas - PullRequest
0 голосов
/ 20 июня 2020

У меня есть фрейм данных

value    | count
-----------------
1.8      |  3
1.7      |  2
6.3      |  7
8.4      |  3

Я хотел бы создать новый столбец, в котором каждая строка i имеет значение

sum(count[i]*count[j]*(value[i]-value[j])**2,{sum over j where j>i})

, где j охватывает все строки с индексом больше, чем у строки i.

Если я извлечу список значений values = [1.8, 1.7, 6.3, 8.4], я смогу оценить (value[i]-value[j])**2 for j>i как

def f(m):
    return sum([(values[m] - x)**2 for x in values[m:]])

[f(m) for m in range(len(values))][:-1]

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

Ожидаемый столбец, учитывая приведенный выше фрейм данных, будет иметь значения [92.61, 817.35, 565.58, 0]

1 Ответ

1 голос
/ 20 июня 2020

Сделаем numpy трансляцию

v=df.value.values
c=df['count'].values
np.sum(np.tril(c*c[:,None]*((v-v[:,None])**2),-1).T,1)
array([817.35, 565.58,  92.61,   0.  ])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...