排序表python时排除给定的列

时间:2014-02-12 13:55:10

标签: python sorting

我正在尝试对表进行排序,但希望在排序时按名称排除给定列。换句话说,给定的列应该在排序之前保持原样。这旨在处理诸如“不知道”,“NA”等列。

我使用的API是唯一的和公司特定的,但它使用python。

此API中的表是一个对象,它是一个行列表,其中每一行是一个单元格列表,每个单元格都是一个单元格值列表。

我目前有一个工作函数可以对一个表进行排序,但我想编辑/修改它以按名称排除给定的列,但我很难找到方法。

仅供参考 - “矩阵”可以被视为表格本身。

def SortColumns(byRow=0, usingCellValue=0, descending=True):
"""
:param byRow: Use the values in this row to determine the sort order of the 
        columns.
:param usingCellValue: When there are multiple values within a cell use this
        to control which value row within each cell is used for sorting
        (zero-based)
:param descending: Determines the order in which the values should be
        sorted. 
"""

   for A in range(0,Matrix.Count):
        for B in range(0,Matrix.Count):
            if(A==B):
                continue; #do not compare rows against eachother

            valA = Matrix[byRow][A][usingCellValue].NumericValue if Matrix[byRow][A].Count > usingCellValue else None;
            valB = Matrix[byRow][B][usingCellValue].NumericValue if Matrix[byRow][B].Count > usingCellValue else None;

            if(descending):
                if valB < valA:
                    Matrix.SwitchColumns(A,B)
            else:
                if valA < valB:
                    Matrix.SwitchColumns(A,B)

我正在考虑添加一个新参数,该参数包含列名列表,并使用它来绕过这些列。

类似的东西:

def SortColumns(fixedcolumns, byRow=0,usingCellValue=0,descending=True):

1 个答案:

答案 0 :(得分:0)

在遍历列时,您可以使用continue语句跳过您不想移动的列。将这些条件放在两个循环的开头:

for A in range(0,Matrix.Count):
    a_name = ??? #somehow get the name of column A
    if a_name in fixedcolumns: continue
    for B in range(0,Matrix.Count):
        b_name = ??? #somehow get the name of column B
        if b_name in fixedcolumns: continue
        if(A==B):
            continue