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

如何基于Pandas列表列按位置动态生成提取后的新列?

解决方案

可以通过Pandas的apply和DataFrame.tolist()方法高效实现需求,无需手动循环初始化列,步骤如下:

  1. 处理banking_number列的每个列表:对列表内元素,若为字符串'NaN'则保留,否则提取前两位字符;
  2. 将处理后的列表转换为新的DataFrame,自动为长度不足的列表补全缺失值;
  3. 拼接原DataFrame与新生成的银行编号列,最后统一将缺失值替换为字符串'NaN'。

完整代码

import pandas as pd
import numpy as np

# 初始化原始数据
df = pd.DataFrame({
    'first_name': ['Charles', 'Charles2', 'Charles3'],
    'last_name': ['George', 'George2', 'George3'],
    'banking_number': [['NaN'], ['UK421'], ['UK123', 'FR789']]
})

# 处理每个银行编号列表:提取前两位,特殊保留'NaN'
processed_banks = df['banking_number'].apply(
    lambda x: [item if item == 'NaN' else item[:2] for item in x] 
    if pd.notna(x) else []
)

# 将处理后的列表转为DataFrame,自动补全缺失值,设置列名
max_bank_count = processed_banks.str.len().max()
bank_columns = pd.DataFrame(
    processed_banks.tolist(),
    columns=[f'bank_{i+1}' for i in range(max_bank_count)]
)

# 拼接原数据与新列,填充缺失值为'NaN'字符串
df_final = pd.concat([df, bank_columns], axis=1).fillna('NaN')

print(df_final)

输出结果

first_name last_name   banking_number bank_1 bank_2
0    Charles     George           [NaN]    NaN    NaN
1   Charles2    George2          [UK421]     UK    NaN
2   Charles3    George3  [UK123, FR789]     UK     FR

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 08:07:36