【问题标题】:How to change row order like A1, A10, A11, ..., A2 to A1, A2, ..., A10, A11 in Pandas如何在 Pandas 中将 A1、A10、A11、...、A2 等行顺序更改为 A1、A2、...、A10、A11
【发布时间】:2020-09-04 02:14:09
【问题描述】:

当我从指定文件夹导入我的数据文件时,Pandas 数据框会自动对行顺序进行排序,如 A1、A10、A11、...、A2,但我想将其设为 A1、A2、...、A10、A11所以 A2 在 A10、A11 之前。

你知道如何改变行序吗?所有列的行顺序不应仅更改包含 A1、A10、A11、...、A2 的特定列。因此,例如,列 'ID' 和 'Identifier' 的行顺序应该根据 'Loc' 列改变。 此外,实际数据更长,字母更多,直到 Z。

示例代码为:

data = {'ID':['S1', 'S1', 'S1' ,'S1'  ,'S2' ,'S3' ,'S3', 'S4', 'Negative', 'Positive', 'Negative',
             'S1', 'S1' ,'S2' ,'S2' ,'S2' ,'S3' ,'S4', 'S4', 'Positive', 'Positive', 'Negative'], 
   'Loc':['A1', 'A10', 'A11' ,'A2' ,'A3' ,'A4' ,'A5', 'A6', 'A7', 'A8', 'A9',
               'B1', 'B10', 'B11' ,'B2' ,'B3' ,'B4' ,'B5' ,'B6', 'B7', 'B8', 'B9'],
   'Identifier' :['asd01', 'asd02', 'asd04', 'asd05', 'asd06', 'asd07', 'asd08', 'asd09'
             ,'asd10' ,'asd11' ,'asd13' ,'asd14' ,'asd15', 'asd16', 'asd17', 'asd18',
             'asd19', 'asd20', 'asd21', 'asd22', 'asd23', 'asd24']}

感谢您的帮助:)

【问题讨论】:

标签: python pandas


【解决方案1】:

我认为可能有更好的方法来做到这一点,但现在可以将其用作解决方法; 将要排序的列划分为 Char 和 Int,然后按值排序:

df['letter'] = df.Loc.apply(lambda x: x[0])
df['number'] = df.Loc.apply(lambda x: int(x[1:]))
df = df.sort_values(by=['letter', 'number'])

然后您可以删除创建的列。 请注意,如果您的 'Loc' 实例包含多个字符,则可能需要其他方法将字母与数字分开,可能是正则表达式。

【讨论】:

    猜你喜欢
    • 2023-01-09
    • 2020-07-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多