You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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)

代码说明

  1. 补充导入pandas库(原代码遗漏),创建数据集对应的DataFrame。
  2. 遍历每一列,提取数值的首位数字:先将NaN填充为-1,转字符串后取第一个字符,再把'-1'替换为'-',匹配目标效果。
  3. 使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 04:35:19