python - 如何为列表中的每个列表创建一个新列
问题描述
我在列表中有列表,我想在我的数据框中为每个列表创建一个新列:
我的输入可以在下面看到:
datalist : [[abc1, abc2, abc3, abc4, abc5],[kh1, kh2, kh3, kh4],[jpor1, jpor2, jpor3, jpor4, jpor5]]
我中的每个项目datalist
都是我现有数据框中的列标题,而每个索引也是我的数据框中的一列,其中包含我需要为我的新列提取值的数字。
所以我希望我的输出是这样的:
index abc1 abc2 abc3 abc4 abc5 abc_result
4 87 94 34 28 43 28
2 87 94 34 28 43 94
5 87 94 34 28 43 43
4 87 94 34 28 43 28
1 87 94 34 28 43 87
因为我的数据列表中有 3 个列表,所以我希望创建 3 个新列并将其添加到数据框中,它们是abc_result
, kh_result
, jpor_result
(全部基于索引列)。我真的很困惑,因为我觉得我需要为我的数据列表中的每个列表创建一个新列表,同时对新列标题进行字符串格式化?
所以基本上新列的值是基于索引列的值。如果值为 1,我想从 abc1 中提取 abc_result 的值,如果为 2,则从 abc2 中提取值,等等。然后 kh_result 的另一个新列也需要基于索引列的 kh1/kh2/kh3 中的值价值。
解决方案
你可以试试这个:
import pandas as pd
import numpy as np
datalist = [
["abc1", "abc2", "abc3", "abc4", "abc5"],
["kh1", "kh2", "kh3", "kh4"],
["jpor1", "jpor2", "jpor3", "jpor4", "jpor5"]
]
flat_list = [item for sublist in datalist for item in sublist]
column_groups= set([item[:-1] for sublist in datalist for item in sublist])
对于获得所需结果的逐行操作,您需要创建一个函数:
def grabber(row,key:str):
return(row[key + str(row['index'])])
该函数根据列组指标的索引和键获取值。
剩下的就是迭代列组键并生成结果。让我们假设您的数据已经加载到df
:
df = <load the data>
for key in column_groups:
df[key + '_result'] = df.apply(lambda x: grabber(x,key), axis=1)
但是,如果您的项目只有最后一个字符作为数字,则此代码有效。否则,您需要对可以在此处找到的每个子列表使用最长匹配算法。
推荐阅读
- amazon-web-services - 在 AWS 上使用 ECS 和外部 Zookeeper 的 NiFi 集群
- paypal - 制作自定义“使用 PayPal 登录按钮”
- javascript - Google Maps API v3 显示旅行时间
- c - C中的局部int与全局int
- python - 为什么在 pandas 中创建多个列时,括号 [] 和 .loc 的工作方式不同?
- sprite-kit - 敌人的不同动作
- javascript - 当我添加命中检测时,我的画布消失了
- python - 如何创建一个检查网站可用性的python函数?
- java - Maven如何忽略工件描述符?
- android - 有没有办法使用 adb 获取设备名称?例如,如果设备名称是 John Doe 的 Nexus,如何使用命令获取名称?