Python - 将数据框除以数字列表,包括零

Python - divide data frame by a list of numbers, zero included

我有一个包含 10 列的数据框。我想用不同的数字划分每一列。如何将数据框除以数字列表?列表中也有零,如果除以零,我希望该列中的数字为 1。如何做到这一点?

谢谢

您可以使用 div,然后将 L0 的值替换为 1:

df = pd.DataFrame({'A':[1,2,3],
                   'B':[4,5,6],
                   'C':[7,8,9],
                   'D':[1,3,5],
                   'E':[5,3,6],
                   'F':[7,4,3]})

print (df)
   A  B  C  D  E  F
0  1  4  7  1  5  7
1  2  5  8  3  3  4
2  3  6  9  5  6  3

L = [0,1,2,3,0,3]
s = pd.Series(L, index=df.columns)
df1 = df.div(s)
df1[s.index[s == 0]] = 1

print (df1)
     A    B    C         D    E         F
0  1.0  4.0  3.5  0.333333  1.0  2.333333
1  1.0  5.0  4.0  1.000000  1.0  1.333333
2  1.0  6.0  4.5  1.666667  1.0  1.000000

给定数据框 df 并将 lst 列为 numpy 数组

df = pd.DataFrame(np.random.rand(10, 10))

lst = np.array([1, 0, 1, 0, 1, 0, 1, 0, 1, 0])

然后我们可以使用遮罩进行过滤。通过使用掩码,我们可以使用布尔切片来获取 lst 中具有相应零值的列。我们还可以使用 ~m 和 slice.

轻松访问非零值
m = lst == 0

# assign the number 1 to all columns where there is a zero in lst
df.values[:, m] = 1

# do the division in place for all columns where lst is not zero
df.values[:, ~m] /= lst[~m]

print(df)

          0    1         2    3         4    5
0  0.195316  1.0  0.988503  1.0  0.981752  1.0
1  0.136812  1.0  0.887689  1.0  0.346385  1.0
2  0.927454  1.0  0.733464  1.0  0.773818  1.0
3  0.782234  1.0  0.363441  1.0  0.295135  1.0
4  0.751046  1.0  0.442886  1.0  0.700396  1.0
5  0.028402  1.0  0.724199  1.0  0.047674  1.0
6  0.680154  1.0  0.974464  1.0  0.717932  1.0
7  0.636310  1.0  0.191252  1.0  0.777813  1.0
8  0.766330  1.0  0.975292  1.0  0.224856  1.0
9  0.335766  1.0  0.093384  1.0  0.547195  1.0