Векторизация pandas df операция? - PullRequest
2 голосов
/ 15 апреля 2020

Допустим, у меня есть numpy df, например

X = pd.DataFrame(np.array([
[  9.,   12.,   4.],
[  1.,  31.,   3.],
[  6.,   4.,  1.]]) )

Я хочу разделить каждую запись на сумму строки * столбца sum. Я знаю, что могу получить сумму строк и столбцов, соответственно, используя X.sum() и X.sum(1), но я не знаю, как выполнить операцию, которую я ищу, кроме циклического прохождения каждой грубой силы входа.

Ответы [ 2 ]

1 голос
/ 15 апреля 2020

Использовать трансляцию:

import pandas as pd
import numpy as np

X = pd.DataFrame(np.array([
    [9., 12., 4.],
    [1., 31., 3.],
    [6., 4., 1.]]))

X_arr = X.values
mult = X_arr.sum(1)[:, None] * X_arr.sum(0)

result = X / mult
print(result)

Вывод

          0         1         2
0  0.022500  0.010213  0.020000
1  0.001786  0.018845  0.010714
2  0.034091  0.007737  0.011364
0 голосов
/ 15 апреля 2020

Вам просто нужно разделить дважды:

# axis='rows' divide row-wise
x.div(x.sum()).div(x.sum(1), axis='rows')

Вывод:

          0         1         2
0  0.022500  0.010213  0.020000
1  0.001786  0.018845  0.010714
2  0.034091  0.007737  0.011364
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...