2017-07-19 115 views
1

比方说,我有一个数据帧(DF)是这样的:删除连续前导零熊猫

A  B  C  D 
0 0.0000 0.0000 0.0000 0.1234 
1 0.0000 -0.9760 -0.5268 -0.4261 
2 -0.6277 -1.9284 -1.7718 3.4021 
3 0.0000 0.0000 -0.0013 2.2955 
4 0.6241 -1.9643 -0.6090 2.0827 

,我想从每行取出领先0.0000s,并有NaN的为空白的背后新的“校准”行如下:

A  B  C  D 
0 0.1234 NaN  NaN  NaN 
1 -0.9760 -0.5268 -0.4261 NaN 
2 -0.6277 -1.9284 -1.7718 3.4021 
3 -0.0013 2.2955 NaN  NaN 
4 0.6241 -1.9643 -0.6090 2.0827 

是否有一个简单的熊猫功能来做到这一点?

回答

5

让使用maskeqapply,并dropna

df.mask(df.eq(0)).apply(lambda x: pd.Series(x.dropna().values,index=x.index[:len(x.dropna())]),axis=1) 

输出:

 A  B  C  D 
0 0.1234  NaN  NaN  NaN 
1 -0.9760 -0.5268 -0.4261  NaN 
2 -0.6277 -1.9284 -1.7718 3.4021 
3 -0.0013 2.2955  NaN  NaN 
4 0.6241 -1.9643 -0.6090 2.0827 
+0

很不错的解决方案! +1 – MaxU

+0

谢谢MaxU。 –