如何用Pandas在多列中查找指定整数的首次出现位置及对应年份
解决方法:统计每行数字5首次出现的对应年份
原始数据集
2010 2011 2012 0 NaN NaN 505303.0 1 542225.0 NaN 210530.0 2 123210.0 429439.0 543964.0 3 434304.0 540325.0 NaN 4 750450.0 143430.0 540425.0 5 543015.0 549320.0 104365.0
提取首位数字后的目标效果
2010 2011 2012 0 - - 5 1 5 - 2 2 1 4 5 3 4 5 - 4 7 1 5 5 5 5 1
需求说明
统计每行中数字5的首次出现位置,记录对应的年份;若数字5多次出现,仅保留首次出现的年份。
完整实现代码
import numpy as np import pandas as pd data = {"2010": [np.nan, 542225, 123210, 434304, 750450, 543015], "2011": [np.nan, np.nan, 429439, 540325, 143430, 549320], "2012": [505303, 210530, 543964, np.nan, 540425, 104365] } df_t = pd.DataFrame(data) # 提取每个单元格数值的首位数字,NaN替换为'-' for col in df_t.columns: df_t[col] = (df_t[col] .fillna(-1) .astype(str) .str[0] .replace('-1', '-') ) # 找出每行中第一个出现数字5的年份 df_t['首次出现5的年份'] = df_t.apply( lambda row: next((col for col in df_t.columns if row[col] == '5'), None), axis=1 ) print(df_t)
代码说明
- 补充导入
pandas库(原代码遗漏),创建数据集对应的DataFrame。 - 遍历每一列,提取数值的首位数字:先将NaN填充为-1,转字符串后取第一个字符,再把'-1'替换为'-',匹配目标效果。
- 使用
apply遍历每行,结合next函数按年份顺序查找第一个值为'5'的列名,即为首次出现5的年份;若该行无数字5,则返回None。
运行结果
2010 2011 2012 首次出现5的年份 0 - - 5 2012 1 5 - 2 2010 2 1 4 5 2012 3 4 5 - 2011 4 7 1 5 2012 5 5 5 1 2010
内容的提问来源于stack exchange,提问作者snate
相关产品推荐
相关产品推荐

