仅在特定条件下将 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 - -
我有一个数据框
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 - -