我试图在一个非常大的熊猫数据框中用零填充NaN,但前提是在同一行中但在其左侧的单元格中有非NaN值。因此,例如,从此输入DataFrame中,
input = pd.DataFrame([[1, np.NaN, 1.5, np.NaN], [np.NaN, 2, np.NaN, np.NaN]], index=['A', 'B'], columns=['col1', 'col2', 'col3', 'col4'])
看起来像:
col1 col2 col3 col4
A 1.0 NaN 1.5 NaN
B NaN 2.0 NaN NaN
预期的输出将是:
col1 col2 col3 col4
A 1.0 0 1.5 0
B NaN 2.0 0 0
看看[B,col1]为何仍然是Nan,因为它的左边没有not-NaN值,但是所有四个[A,col2],[A,col4],[B,col3]和[B,col4]都已填充零(因为存在较左的非NaN值)。
有人对如何进行此操作有任何想法吗?非常感谢!
使用前向填充缺失值并测试不缺失,并通过测试缺失值和此掩码分配链0
:
df[df.ffill(axis=1).notna() & df.isna()] = 0
print (df)
col1 col2 col3 col4
A 1.0 0.0 1.5 0.0
B NaN 2.0 0.0 0.0
或者,您可以将累积和与测试0
值不相等的值一起使用:
df[df.fillna(0).cumsum(axis=1).ne(0) & df.isna()] = 0
print (df)
col1 col2 col3 col4
A 1.0 0.0 1.5 0.0
B NaN 2.0 0.0 0.0
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句