【问题标题】:Combine columns and sort in Pandas在 Pandas 中合并列和排序
【发布时间】:2020-07-27 21:35:29
【问题描述】:

例如,假设我有一个包含第 1、2 和 3 列的表。第 1 列包含狗、猫、狗。我想合并第 2 列和第 3 列

chars = ['column2', 'column3']
csv['combined'] = csv[chars].apply(lambda row: ','.join(row.values.astype(str)), axis=1)

现在假设 column2 第 1 行包含 a,第 2 行包含 b,第 3 行包含 c。假设 column3 第 1 行包含 b,第 2 行包含 c,第 3 行包含 a。我想排序并拥有第 1 行显示 (a, b),然后是第 3 行,它也应该是 (a, c)。即使我尝试这样的 sort_values,我也无法让第 3 行中的 a 优先:

csv['combined'] = csv['combined'].sort_values()

最终我想按第 1 列分组,然后聚合。最后我应该看到(dog, a,c), (dog, a,c), and (cat, b, c)

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    您希望按升序对行进行排序。这种情况你可以试试np.sort

    cols = ['column2','column3']
    
    df[cols] = np.sort(df[cols], axis=1)
    

    输出:

      column1 column2 column3
    0     dog       a       b
    1     cat       b       c
    2     dog       a       c
    

    【讨论】:

      【解决方案2】:

      希望这会有所帮助,快乐编码:)

      df = pd.DataFrame(data=[['dog','a','b'],['cat','b','c']['dog','c','a']],columns=(['animal','column1','column2']))
      print("Actual DataFrame \n")
      print(df)
      
      for i in range(len(df)):
        if df.loc[i]['column1']>df.loc[i]['column2']:
            tmp=df.loc[i]['column1'] 
            df.loc[i]['column1'] =df.loc[i]['column2']
            df.loc[i]['column2'] = tmp
      
      print("\n Transformed DataFrame \n")
      print(df.sort_values(by='animal',ascending=False))
      

      【讨论】:

        猜你喜欢
        • 2012-01-18
        • 2013-02-03
        • 1970-01-01
        • 2014-02-07
        • 2010-11-12
        • 2015-12-17
        • 1970-01-01
        • 1970-01-01
        • 2014-12-02
        相关资源
        最近更新 更多