如何为嵌套列表中的每个子列表在DataFrame中创建对应结果列
以下是基于Pandas的实现方案,采用向量化运算实现,性能远高于逐行apply方案,适合任意规模的数据集使用:
完整可运行代码示例
import pandas as pd import numpy as np # 替换为你自己的原始DataFrame df = pd.DataFrame({ 'index': [4,2,5,4,1], 'abc1': [87,87,87,87,87], 'abc2': [94,94,94,94,94], 'abc3': [34,34,34,34,34], 'abc4': [28,28,28,28,28], 'abc5': [43,43,43,43,43], 'kh1': [1,2,3,4,5], 'kh2': [6,7,8,9,10], 'kh3': [11,12,13,14,15], 'kh4': [16,17,18,19,20], 'jpor1': [10,20,30,40,50], 'jpor2': [60,70,80,90,100], 'jpor3': [110,120,130,140,150], 'jpor4': [160,170,180,190,200], 'jpor5': [210,220,230,240,250] }) # 定义你的嵌套列名列表和对应结果列名 datalist = [ ['abc1', 'abc2', 'abc3', 'abc4', 'abc5'], ['kh1', 'kh2', 'kh3', 'kh4'], ['jpor1', 'jpor2', 'jpor3', 'jpor4', 'jpor5'] ] result_col_names = ['abc_result', 'kh_result', 'jpor_result'] # 核心逻辑:批量生成结果列 for cols, res_col in zip(datalist, result_col_names): # index转列位置下标,同时做边界保护,避免下标越界 col_index = np.clip(df['index'].values - 1, 0, len(cols)-1) # 用numpy高级索引批量取值 df[res_col] = df[cols].values[np.arange(len(df)), col_index] # 查看输出结果 print(df)
说明
- 上述代码中
np.clip为可选的边界保护逻辑,当index列取值超过对应子列表长度时,会自动取子列表最后一个元素的值,不需要边界保护的可以去掉该方法直接使用df['index'].values -1即可 - 运行后生成的
abc_result列完全符合你给出的示例输出
内容的提问来源于stack exchange,提问作者stargazing
相关产品推荐
相关产品推荐

