如何在DataFrame中获取每行最后一个值及对应列名?
嘿,我来帮你搞定这个问题!要同时拿到DataFrame每行的最后一个值和对应的列名,用Pandas的工具就能轻松实现,我给你分两种常见场景说明:
场景1:取每行最后一列的列名和值(不考虑缺失值)
如果你的需求是直接获取每行最右侧列的数值和列名,代码可以这么写:
import pandas as pd # 构造示例DataFrame df = pd.DataFrame({ 'A': [10, 20, 30], 'B': [40, 50, 60], 'C': [70, 80, 90] }) # 方法1:单独生成两列分别存储列名和值 df['last_column_name'] = df.columns[-1] df['last_column_value'] = df.iloc[:, -1] # 方法2:把结果合并成元组列 df['last_info'] = df.apply(lambda row: (row.index[-1], row.iloc[-1]), axis=1)
这里df.columns[-1]直接拿到最后一列的列名,iloc[:, -1]取出最后一列的所有行值;用apply加lambda则可以逐行打包列名和值。
场景2:取每行最后一个非缺失值的列名和值(处理空值场景)
如果你的DataFrame存在缺失值,需要定位每行最后一个非空值的位置,就用这个方案:
import pandas as pd # 构造带缺失值的示例DataFrame df = pd.DataFrame({ 'A': [1, None, 3], 'B': [None, 5, 6], 'C': [7, 8, None] }) # 定义函数,返回每行最后一个非缺失值的列名和值 def get_last_valid(row): last_col = row.last_valid_index() if last_col is not None: return (last_col, row[last_col]) return (None, None) # 整行都是空值时的返回值,可按需调整 # 应用到每行,生成合并列 df['last_valid_info'] = df.apply(get_last_valid, axis=1) # 拆分成分开的列(可选) df[['last_valid_col', 'last_valid_value']] = df['last_valid_info'].apply(pd.Series)
这里的last_valid_index()是Pandas的实用方法,它会返回该行最后一个非缺失值对应的列名;配合row[last_col]就能拿到对应的值。如果整行都是空值,我们返回(None, None),你可以根据业务需求修改这个默认返回逻辑。
内容的提问来源于stack exchange,提问作者Lumos
相关产品推荐
相关产品推荐

