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

时间:2017-06-12 18:09:25

标签: 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', '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]]

如果计数不是基于模式(最后一个元素小于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]]

请指导如何有效地实现这一目标。

EDIT1:

以下是我提出的建议:

(用-999替换空字符串)

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()

0 个答案:

没有答案