Home > Mobile >  Pandas iloc and conditional sum
Pandas iloc and conditional sum

Time:11-18

This is my dataframe:

0           1     0       1     1
1           0     1       0     1

I generate the sum for each column as below:

data.iloc[:,1:] = data.iloc[:,1:].sum(axis=0)

The result is:

0           1     1       1     2
1           1     1       1     2

But I only want to update values that are not zero:

0           1     0       1     2
1           0     1       0     2

As it is a large dataframe and I don't know which columns will contain zero, I am having trouble in getting the condition to work togther with the iloc

CodePudding user response:

Assuming the following input:

   0  1  2  3  4
0  0  1  0  1  1
1  1  0  1  0  1

you can use the underlying numpy array and numpy.where:

import numpy as np
a = data.values[:, 1:]
data.iloc[:,1:] = np.where(a!=0, a.sum(0), a)

output:

   0  1  2  3  4
0  0  1  0  1  2
1  1  0  1  0  2
  • Related