Python - 用数字列表划分数据帧,包括零

时间:2017-04-17 19:43:27

标签: python pandas division

我有一个包含10列的数据框。我想用不同的数字划分每列。如何通过数字列表划分数据框?列表中也有零,如果除以零,我希望该列中的数字为1.如何执行此操作?

由于

2 个答案:

答案 0 :(得分:2)

将数据帧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和切片轻松访问非零。

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

答案 1 :(得分:1)

您可以使用div,然后将0L的值替换为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