如何在python中基于列表中元素的模式进行聚合

如何在python中基于列表中元素的模式进行聚合,python,Python,我有以下列表,其中最后一个元素是该列表中组合的计数 [['OY', 'G1', 'A1', 'R3', '', 9L], ['OY', 'G1', 'A1', 'R12', '', 30L], ['OY', 'G1', 'A2', 'R3', '', 12L], ['OY', 'G1', 'A2', 'R12', '', 70L], ['OY', 'G1', 'A3', 'R3', '', 14L], ['OY', 'G1', 'A3', 'R12', '', 67L], ['OY'

我有以下列表,其中最后一个元素是该列表中组合的计数

[['OY', 'G1', 'A1', 'R3', '', 9L],
 ['OY', 'G1', 'A1', 'R12', '', 30L],
 ['OY', 'G1', 'A2', 'R3', '', 12L],
 ['OY', 'G1', 'A2', 'R12', '', 70L],
 ['OY', 'G1', 'A3', 'R3', '', 14L],
 ['OY', 'G1', 'A3', 'R12', '', 67L],
 ['OY', 'G2', 'A1', 'R3', '', 12L],
 ['OY', 'G2', 'A1', 'R12', '', 27L],
 ['OY', 'G2', 'A2', 'R3', '', 16L],
 ['OY', 'G2', 'A2', 'R12', '', 61L],
 ['OY', 'G2', 'A3', 'R3', '', 21L],
 ['OY', 'G2', 'A3', 'R12', '', 69L],
 ['OY', 'G1', 'A4', 'R3', 'A5', 23L],
 ['OY', 'G1', 'A4', 'R3', 'A6', 7L],
 ['OY', 'G1', 'A4', 'R12', 'A5', 94L],
 ['OY', 'G1', 'A4', 'R12', 'A6', 49L],
 ['OY', 'G2', 'A4', 'R3', 'A5', 29L],
 ['OY', 'G2', 'A4', 'R3', 'A6', 14L],
 ['OY', 'G2', 'A4', 'R12', 'A5', 85L],
 ['OY', 'G2', 'A4', 'R12', 'A6', 52L],
 ['ON', 'G1', 'A1', 'R3', '', 6L],
 ['ON', 'G1', 'A1', 'R12', '', 22L],
 ['ON', 'G1', 'A2', 'R3', '', 10L],
 ['ON', 'G1', 'A2', 'R12', '', 54L],
 ['ON', 'G1', 'A3', 'R3', '', 13L],
 ['ON', 'G1', 'A3', 'R12', '', 56L],
 ['ON', 'G2', 'A1', 'R3', '', 10L],
 ['ON', 'G2', 'A1', 'R12', '', 23L],
 ['ON', 'G2', 'A2', 'R3', '', 14L],
 ['ON', 'G2', 'A2', 'R12', '', 47L],
 ['ON', 'G2', 'A3', 'R3', '', 19L],
 ['ON', 'G2', 'A3', 'R12', '', 55L],
 ['ON', 'G1', 'A4', 'R3', 'A5', 22L],
 ['ON', 'G1', 'A4', 'R3', 'A6', 7L],
 ['ON', 'G1', 'A4', 'R12', 'A5', 78L],
 ['ON', 'G1', 'A4', 'R12', 'A6', 47L],
 ['ON', 'G2', 'A4', 'R3', 'A5', 25L],
 ['ON', 'G2', 'A4', 'R3', 'A6', 12L],
 ['ON', 'G2', 'A4', 'R12', 'A5', 80L],
 ['ON', 'G2', 'A4', 'R12', 'A6', 46L]]
不基于模式if count(最后一个元素如果小于20),它应该与其对应元素组合

比如说,

['OY', 'G1', 'A1', 'R3', '', 9L],
 ['OY', 'G1', 'A1', 'R12', '', 30L]
应该成为

['OY', 'G1', 'A1', 'R123', '', 39L]
同样地

 ['OY', 'G1', 'A4', 'R3', 'A5', 23L],
 ['OY', 'G1', 'A4', 'R3', 'A6', 7L]
将是

['OY', 'G1', 'A4', 'R3', 'A56', 30L].
当计数>20时,应保持原样

这里A5或A6计数<20,将合并。R3和R12的情况相同

最终预期产出为:

[['OY', 'G1', 'A1', 'R123', '', 39L],
 ['OY', 'G1', 'A2', 'R123', '', 82L],
 ['OY', 'G1', 'A3', 'R123', '', 81L],
 ['OY', 'G2', 'A1', 'R123', '', 49L],
 ['OY', 'G2', 'A2', 'R133', '', 77L],
 ['OY', 'G2', 'A3', 'R3', '', 21L],
 ['OY', 'G2', 'A3', 'R12', '', 69L],
 ['OY', 'G1', 'A4', 'R3', 'A56', 30L],
 ['OY', 'G1', 'A4', 'R12', 'A5', 94L],
 ['OY', 'G1', 'A4', 'R12', 'A6', 49L],
 ['OY', 'G2', 'A4', 'R3', 'A56', 43L],
 ['OY', 'G2', 'A4', 'R12', 'A5', 85L],
 ['OY', 'G2', 'A4', 'R12', 'A6', 52L],
 ['ON', 'G1', 'A1', 'R123', '', 28L],
 ['ON', 'G1', 'A2', 'R123', '', 64L],
 ['ON', 'G1', 'A3', 'R123', '', 69L],
 ['ON', 'G2', 'A1', 'R123', '', 33L],
 ['ON', 'G2', 'A2', 'R123', '', 61L],
 ['ON', 'G2', 'A3', 'R123', '', 74L],
 ['ON', 'G1', 'A4', 'R3', 'A56', 29L],
 ['ON', 'G1', 'A4', 'R12', 'A5', 78L],
 ['ON', 'G1', 'A4', 'R12', 'A6', 47L],
 ['ON', 'G2', 'A4', 'R3', 'A56', 37L],
 ['ON', 'G2', 'A4', 'R12', 'A5', 80L],
 ['ON', 'G2', 'A4', 'R12', 'A6', 46L]]
请就如何有效实现这一目标提供指导

编辑1:

以下是我的想法:

(将空字符串替换为-999)

对于枚举中的indx,k(进程列表):
如果k[3]=“R3”和k[4]=“999”和k[5]<20:
进程列表[indx][3]=“R123”
如果(indx+1)=0:
工艺清单[indx-1][3]=“R123”
如果k[4]=“A5”且k[5]<20:
进程列表[indx][4]=“A56”
如果(indx+1)=0:
工艺清单[indx-1][4]=“A56”
final_df=pd.DataFrame(进程_列表,列=['olflag'、'gflag'、'aflag'、'rflag'、'apflag'、'count']))
df_grouped=final_df.groupby(['olflag','gflag','aflag','rflag','apflag'])。sum().重置索引()
df_grouped.values.tolist()

不是每个列表的最后一个元素,也是一个字符串吗?它基本上是计数(精确到整数)。请注意,可以忽略其末尾的L。溢出不是完成工作的地方。尝试一下,那么其他人会很乐意帮助你的代码确保Tyler。我已经开始了,并且觉得我正在做得很长。一旦我得到我想要的,我可以在这里发布代码进行优化。我已经用我的解决方案编辑了这篇文章。如果可以优化,请帮助我。
for indx,k in enumerate(process_list):
    if k[3] == 'R3' and k[4] == '-999' and k[5] < 20:
        process_list[indx][3] = 'R123'
        if (indx+1) <= len(process_list):
            process_list[indx+1][3] = 'R123'
    if k[3] == 'R12' and k[4] == '-999' and k[5] < 20:
        process_list[indx][3] = 'R123'
        if (indx-1) >= 0:
            process_list[indx-1][3] = 'R123'
    if k[4] == 'A5' and k[5] < 20:
        process_list[indx][4] = 'A56'
        if (indx+1) <= len(process_list):
            process_list[indx+1][4] = 'A56'
    if k[4] == 'A6' and k[5] < 20:
        process_list[indx][4] = 'A56'
        if (indx-1) >= 0:
            process_list[indx-1][4] = 'A56'

final_df = pd.DataFrame(process_list,columns = ['olflag','gflag','aflag','rflag','apflag','count'])

df_grouped = final_df.groupby(['olflag','gflag','aflag','rflag','apflag']).sum().reset_index()

df_grouped.values.tolist()