python - 将嵌套的 for 循环转换为 lambda 函数以快速执行
问题描述
嗨,我的数据框看起来像附加的图像。Nbr_Cells 列是一个对象列表。我正在尝试在数据框中添加另一列,该列是 Nbr_Cells 列的子列表,如果单个对象以列 cellid 的相同结尾结尾。
例如,
cellid = U21-A000CH-1A
Nbr_Cells =[U21-MCH001-1A,U21-MCH001-2A,U21-SG0024-1A,U21-MCH001-2B]然后子列表 = [U21-MCH001-1A,U21-SG0024-1A]
因为它以类似的“1A”结尾。同样,这必须为每一行复制。
我用 for 循环编写了以下代码,并且工作正常。但是执行起来需要很多时间。需要帮助将其转换为 lambda 函数或任何类似的快速执行代码。
for j in range(0,len(Overall_list)):
print(j)
List = []
for i in Overall_list['Nbr_Cells'][j]:
if(i.split("-")[2] == Overall_list['cellid'][j].split("-")[2]):
List.append(i)
Overall_list['Sub_Nbr_List'][j] = List
解决方案
代码中的主要瓶颈是,Overall_list['cellid'][j].split("-")[2]
当您只能在嵌套循环之外获得一次匹配值时,您正在多次评估。迭代项目通常比按索引引用项目更快。此外,您可以使用列表推导而不是第二个循环:
for j,list_item in enumerate(Overall_list):
print(j)
match = list_item['cellid'].split("-")[2]
List = [ i for i in list_item['Nbr_Cells'] if i.split("-")[2] == match ]
list_item['Sub_Nbr_List'] = List
推荐阅读
- python - 顺序调用时,Spark Data Frame 操作时间显着增长
- android - 在 pubspec.yaml 中使用 fluttertoast 时出现颤振构建问题
- scala - Flink(Scala):尝试在我的程序中使用窗口函数,但它报告类型不匹配
- python - 如何使用 pdoc 为 python 项目生成文档,包括私有/受保护的类
- javascript - 在 JavaScript / TypeScript 中使循环有点异步 / 等待
- angular - Angular2 +在输入时更改电子邮件输入值不起作用
- r - 将两个文件与两个重叠个人子集的年度二进制数据合并的问题
- android - Android Studio:变量意图可能尚未初始化
- java - 为什么从 Java 中的 unix 时间戳中获取错误的星期显示名称
- php - 检查关联数组中的给定键是否有值