矢量化熊猫df操作



假设我有一个numpy df,比如

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

我想把每个条目除以行和*列和。我知道我可以使用X.sum()X.sum(1)分别获得行和列的总和,但除了循环遍历每个条目的暴力之外,我不知道如何执行我正在寻求的操作。

使用广播:

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

您只需要划分两次:

# 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

最新更新