仅在特定条件下将 NaN 替换为 '-' 符号,Python-Pandas

replace NaN with '-' sign only in specefic condition ,Python-Pandas

我有一个数据框

 L1      D1     L2      D2         L3
 1.0    ABC     1.1     4.1        NaN
 NaN    NaN     1.7     NaN        NaN
 NaN    4.1     NaN     NaN        NaN
 NaN    1.8     3.2     PQR        NaN
 NaN    NaN     1.6     NaN        NaN

我想用“-”替换所有 NaN(仅当任何列中的值是该行中的最后一个值时)

所以基本上我想要的输出将是

 L1      D1      L2      D2         L3
 1.0    ABC     1.1     4.1        -
 NaN    NaN     1.7     -          -
 NaN    4.1      -      -          -
 NaN    1.8     3.2     PQR        -
 NaN    NaN     1.6     -          -

谁能帮忙,先谢谢了!

这是一种方法:

minus_mask = df.loc[:, ::-1].notna().cumsum(axis=1).eq(0)
out = df.mask(minus_mask, "-")

我们首先在列上翻转 df 的地方,看看它不是 NaN 的地方,然后计算累计和。如果累计和等于0,那些地方就是我们应该放"-"的地方,所以我们用mask的方法放负号,

获得

>>> out

    L1   D1   L2   D2 L3
0  1.0  ABC  1.1  4.1  -
1  NaN  NaN  1.7    -  -
2  NaN  4.1    -    -  -
3  NaN  1.8  3.2  PQR  -
4  NaN  NaN  1.6    -  -