Pandas技巧:如何提取每行最后一个非零列的数据
提取每行最后一个非零层级值的简洁方案
Excel/Google Sheets 实现
不用嵌套多层条件,直接用LOOKUP函数一步解决:
=LOOKUP("zzzz", B2:E2)
逻辑:LOOKUP会匹配区域内最后一个小于等于查找值的内容,用"zzzz"这类足够大的文本,就能直接定位到最后一个非零的文本值(0作为数值会被忽略)。如果层级列包含数值型非零数据,改用:
=LOOKUP(9.99E+307, B2:E2)
Python Pandas 实现
一行代码完成处理,无需复杂循环:
import pandas as pd # 假设数据集存储在df中,层级列为Lvl 1至Lvl 4 df['Desired Output'] = df[['Lvl 1', 'Lvl 2', 'Lvl 3', 'Lvl 4']].replace(0, pd.NA).bfill(axis=1).iloc[:, 0]
逻辑:先把0替换为缺失值,再按行反向填充(从右往左用最近的非缺失值覆盖缺失值),最后取每行第一列,就是原数据中最后一个非零值。
SQL 实现
利用COALESCE函数从右往左取第一个非零值:
SELECT ID, COALESCE( CASE WHEN Lvl4 != 0 THEN Lvl4 END, CASE WHEN Lvl3 != 0 THEN Lvl3 END, CASE WHEN Lvl2 != 0 THEN Lvl2 END, Lvl1 ) AS Desired_Output FROM your_table;
如果数据库中0已被存储为NULL,可简化为:
SELECT ID, COALESCE(Lvl4, Lvl3, Lvl2, Lvl1) AS Desired_Output FROM your_table;
内容的提问来源于stack exchange,提问作者jpette
相关产品推荐
相关产品推荐

