【问题标题】:Python Pandas - Re-index a dataframe using a specific orderPython Pandas - 使用特定顺序重新索引数据框
【发布时间】:2018-02-15 10:25:50
【问题描述】:

我有一个 pandas 数据框,我想使用特定顺序重新排序索引。

from random import randint
import pandas as pd
days = ["Tuesday", "Thursday", "Monday", "Wednesday"]
df = pd.DataFrame({"Value": [randint(0, 9) for i in range(len(days)*2)]}, 
                  index=[day for day in days for i in range(2)])
myorder = ["Monday", "Tuesday", "Wednesday", "Thursday"]

具体顺序以列表通知myorder

【问题讨论】:

    标签: python pandas dataframe indexing


    【解决方案1】:

    使用CategoricalIndex + sort_index:

    df.index = pd.CategoricalIndex(df.index, categories=myorder, ordered=True)
    df = df.sort_index()
    print (df)
               Value
    Monday         3
    Monday         3
    Tuesday        4
    Tuesday        3
    Wednesday      3
    Wednesday      4
    Thursday       5
    Thursday       2
    

    【讨论】:

      【解决方案2】:

      这是一种方法,如果您希望避免使用分类:

      orderdic = dict(zip(myorder, range(len(myorder))))
      
      df = df.assign(order=df.index.to_series().map(orderdic))\
             .sort_values('order').drop('order', 1)
      
      #            Value
      # Monday         6
      # Monday         6
      # Tuesday        9
      # Tuesday        1
      # Wednesday      1
      # Wednesday      3
      # Thursday       0
      # Thursday       7
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-02-05
        • 2016-07-23
        • 1970-01-01
        • 1970-01-01
        • 2020-07-22
        • 1970-01-01
        • 2021-09-08
        • 2020-06-18
        相关资源
        最近更新 更多