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

如何基于DataFrame的num_type_len与Actual_num列创建Report_length列

问题描述

需要在Pandas DataFrame中创建Report_length列,逻辑为:匹配num_type_len列列表元素的前缀编号(下划线前的数字)与Actual_num列数值,提取对应元素的后缀长度(最后一个下划线后的数字)。

原始数据:

num_type_lenActual_num
[8812_CHECKING_90, 7094_SAVINGS_75, 9939_CHECKING_89]7094
[6846_CHECKING_87, 1906_CHECKING_90]1906

预期输出:

Report_lengthActual_num
757094
901906
解决方案

可以通过Pandas的apply函数结合自定义逻辑实现,以下是具体代码:

import pandas as pd

# 构造原始DataFrame
data = {
    'num_type_len': [
        ['8812_CHECKING_90', '7094_SAVINGS_75', '9939_CHECKING_89'],
        ['6846_CHECKING_87', '1906_CHECKING_90']
    ],
    'Actual_num': [7094, 1906]
}
df = pd.DataFrame(data)

# 自定义函数提取匹配的长度值
def extract_length(row):
    target = str(row['Actual_num'])
    for item in row['num_type_len']:
        parts = item.split('_')
        if parts[0] == target:
            return parts[-1]
    return None  # 无匹配项时返回None

# 生成Report_length列
df['Report_length'] = df.apply(extract_length, axis=1)

# 筛选出目标列
result = df[['Report_length', 'Actual_num']]
print(result)

代码说明

  1. 先构造原始数据的DataFrame;
  2. extract_length函数遍历每行的num_type_len列表,将每个元素按下划线分割,对比前缀编号与Actual_num,匹配后返回最后一段的长度值;
  3. 用apply逐行执行函数生成新列,最后保留需要的两列即可得到预期结果。

如果追求更简洁的写法,也可以用lambda表达式结合生成器:

df['Report_length'] = df.apply(
    lambda r: next((i.split('_')[-1] for i in r['num_type_len'] if i.split('_')[0] == str(r['Actual_num'])), None),
    axis=1
)

内容的提问来源于stack exchange,提问作者Swetha

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 02:35:20