假设我有一个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