Python 基于客户端在dataframe中排序列

Python 基于客户端在dataframe中排序列,python,sorting,dataframe,merge,Python,Sorting,Dataframe,Merge,我的数据框中有一些列(之前已合并),例如: client\u 10,visit\u 10,client\u 11,visit\u 11 我需要对以下列进行排序: client_1,visit_1,client_2,visit_2 在每次代码运行中,我可能有不同数量的客户端,因此没有固定的端点 对我的列进行排序的最佳方法是什么?尝试以下方法: df = df[sorted(list(df.columns), key=lambda n: (int(n.split('_')[1]), n.split(

我的数据框中有一些列(之前已合并),例如:

client\u 10
visit\u 10
client\u 11
visit\u 11

我需要对以下列进行排序:

client_1
visit_1
client_2
visit_2

在每次代码运行中,我可能有不同数量的客户端,因此没有固定的端点

对我的列进行排序的最佳方法是什么?

尝试以下方法:

df = df[sorted(list(df.columns), key=lambda n: (int(n.split('_')[1]), n.split('_')[0]))]
  • list(df.columns)
    是列的列表

  • 排序(…)
    根据编号对它们进行排序,然后
    客户端
    访问

  • 在结果上获取
    df[…]
    ,并将其分配给
    df

尝试以下方法:

df = df[sorted(list(df.columns), key=lambda n: (int(n.split('_')[1]), n.split('_')[0]))]
  • list(df.columns)
    是列的列表

  • 排序(…)
    根据编号对它们进行排序,然后
    客户端
    访问

  • 在结果上获取
    df[…]
    ,并将其分配给
    df


    • 以上由@提供的答案更好。。 这又是一次尝试

      ls = ['client_2','visit_3', 'client_1', 'visit_2', 'client_3', 'visit_1']
      ls = sorted(list(ls), key=lambda n: (n.split('_')[0], int(n.split('_')[1])))
      mid = (len(ls)//2)
      
      print([item for sublist in list(zip(ls[:mid], ls[mid:])) for item in sublist])
      >>>['client_1', 'visit_1', 'client_2', 'visit_2', 'client_3', 'visit_3']
      

      以上由@提供的答案更好。。 这又是一次尝试

      ls = ['client_2','visit_3', 'client_1', 'visit_2', 'client_3', 'visit_1']
      ls = sorted(list(ls), key=lambda n: (n.split('_')[0], int(n.split('_')[1])))
      mid = (len(ls)//2)
      
      print([item for sublist in list(zip(ls[:mid], ls[mid:])) for item in sublist])
      >>>['client_1', 'visit_1', 'client_2', 'visit_2', 'client_3', 'visit_3']
      

      他是客户,一个接一个地来访。。这对他想要的输出有用吗?@YatishKadam谢谢你的评论!UpdatedI在添加时具有“invalid literal for int(),基数为10:“STATUS”。你能告诉我吗?@Narg你可能有一个类似
      client\u STATUS
      visit\u STATUS
      的专栏。在这种情况下,你希望发生什么?谢谢你,阿美,我编写了你的代码,这很有帮助。他是客户,一个接一个地来访。。这对他想要的输出有用吗?@YatishKadam谢谢你的评论!UpdatedI在添加时具有“invalid literal for int(),基数为10:“STATUS”。你能告诉我吗?@Narg你可能有一个类似
      client\u STATUS
      visit\u STATUS
      的专栏。在这种情况下,您希望发生什么?谢谢您,Ami,我编写了您的代码,这很有帮助。我添加了“invalid literal for int(),以10为基数:“STATUS”。你能告诉我吗?当我添加时,我有一个以10为基数的int()无效文本:“STATUS”。你能给个建议吗?