如何将填充应用于1?

时间:2018-07-25 07:21:53

标签: python pandas

我有一个如下数据框,

   A  B  C  D
0  1  0  0  0
1  0  1  0  0
2  0  1  0  0
3  0  0  1  0

我想把它转换成这样,

   A  B  C  D
0  1  0  0  0
1  1  1  0  0
2  1  1  0  0
3  1  1  1  0

到目前为止,我尝试过

df= df.replace('0',np.NaN)
df=df.fillna(method='ffill').fillna('0')

我上面的代码工作正常,

但是我认为还有其他更好的方法可以解决此问题,

1 个答案:

答案 0 :(得分:2)

cumsum与转换为数字的数据一起使用,然后替换为DataFrame.mask

df = df.mask(df.astype(int).cumsum() >= 1, '1')
print (df)
   A  B  C  D
0  1  0  0  0
1  1  1  0  0
2  1  1  0  0
3  1  1  1  0

详细信息

print (df.astype(int).cumsum())
   A  B  C  D
0  1  0  0  0
1  1  1  0  0
2  1  2  0  0
3  1  2  1  0

或在numpy中与numpy.where相同的原则:

arr = df.values.astype(int)

df = pd.DataFrame(np.where(np.cumsum(arr, axis=0) >= 1, '1', '0'), 
                  index=df.index, 
                  columns= df.columns)
print (df)
   A  B  C  D
0  1  0  0  0
1  1  1  0  0
2  1  1  0  0
3  1  1  1  0