【问题标题】:how to sort dataframe based on particular (string)columns using python pandas?如何使用 python pandas 根据特定(字符串)列对数据框进行排序?
【发布时间】:2016-10-08 04:42:48
【问题描述】:

我的 Pandas 数据框包含以下数据:

product,values
 a1,     10
 a5,     20
 a10,    15
 a2,     45
 a3,     12
 a6,     67

我必须根据产品列对这个数据框进行排序。因此,我想得到以下输出:

product,values
 a10,     15
 a6,      67
 a5,      20
 a3,      12
 a2,      45
 a1,      10

很遗憾,我遇到了以下错误:

ErrorDuringImport(路径,sys.exc_info())

ErrorDuringImport:视图中的问题 - 输入“exceptions.Indentation”

【问题讨论】:

    标签: python python-2.7 sorting pandas dataframe


    【解决方案1】:

    您可以先extractdigits 并通过astype 投射到int。然后sort_valuessort 和最后drop 此列:

    df['sort'] = df['product'].str.extract('(\d+)', expand=False).astype(int)
    df.sort_values('sort',inplace=True, ascending=False)
    df = df.drop('sort', axis=1)
    print (df)
      product  values
    2     a10      15
    5      a6      67
    1      a5      20
    4      a3      12
    3      a2      45
    0      a1      10
    

    这是必要的,因为如果只使用sort_values:

    df.sort_values('product',inplace=True, ascending=False)
    print (df)
      product  values
    5      a6      67
    1      a5      20
    4      a3      12
    3      a2      45
    2     a10      15
    0      a1      10
    

    另一个想法是使用natsort库:

    from natsort import index_natsorted, order_by_index
    
    df = df.reindex(index=order_by_index(df.index, index_natsorted(df['product'], reverse=True)))
    print (df)
      product  values
    2     a10      15
    5      a6      67
    1      a5      20
    4      a3      12
    3      a2      45
    0      a1      10
    

    【讨论】:

    • 我使用python 2.7版本
    • 我认为复制错误文本,在有问题的标签下给出edit 并在问题文本下粘贴文本。谢谢。
    • 现在我要补充一下
    • 您的 pandas 好像坏了 - 请参阅 link
    • 我现在有什么?
    猜你喜欢
    • 2021-10-13
    • 2020-06-18
    • 1970-01-01
    • 2020-05-19
    • 2016-11-18
    • 2020-04-23
    • 2020-02-29
    • 2021-10-07
    • 2021-03-14
    相关资源
    最近更新 更多