【问题标题】:Pandas sort data frame by logical dayPandas 按逻辑天对数据帧进行排序
【发布时间】:2019-04-26 12:05:13
【问题描述】:

我有以下结果 pandas DateFrame: 我怎样才能让它正确排序?例如,将第 2 天排在第 1 天之后,而不是在第 11 天之后。如下面的第 2 组所示?

【问题讨论】:

    标签: python pandas sorting dataframe indexing


    【解决方案1】:

    set_levels + sort_index

    问题是您的字符串被排序为 字符串 而不是数字。首先将您的第一个索引级别转换为数字,然后按索引排序:

    # split by whitespace, take last split, convert to integers
    new_index_values = df.index.levels[1].str.split().str[-1].astype(int)
    
    # set 'Day' level
    df.index = df.index.set_levels(new_index_values, level='Day')
    
    # sort by index
    df = df.sort_index()
    
    print(df)
    
               Value
    Group Day       
    A     0        1
          2        3
          11       2
    B     5        5
          7        6
          10       4
    

    设置

    以上演示使用此示例设置:

    df = pd.DataFrame({'Group': ['A', 'A', 'A', 'B', 'B', 'B'],
                       'Day': ['Day 0', 'Day 11', 'Day 2', 'Day 10', 'Day 5', 'Day 7'],
                       'Value': [1, 2, 3, 4, 5, 6]}).set_index(['Group', 'Day'])
    
    print(df)
    
                  Value
    Group Day          
    A     Day 0       1
          Day 11      2
          Day 2       3
    B     Day 10      4
          Day 5       5
          Day 7       6
    

    【讨论】:

    • 感谢您的帮助,非常感谢!
    • 是否有索引仍然返回为“第 0 天”、“第 1 天”等,而不仅仅是整数?
    • @TheCuriouslyCodingFoxah,完成转换后,不会。当然,您可以根据需要从整数计算字符串索引。但很少需要。
    【解决方案2】:

    您需要对整数而不是字符串进行排序:

    import pandas as pd
    x = pd.Series([1,2,3,4,6], index=[3,2,1,11,12])
    x.sort_index()
    
    1     3
    2     2
    3     1
    11    4
    12    6
    dtype: int64
    
    y = pd.Series([1,2,3,4,5], index=['3','2','1','11','12'])
    y.sort_index()
    
    1     3
    11    4
    12    5
    2     2
    3     1
    dtype: int64
    

    我建议在列中只包含数字而不是字符串 'Day..'。

    【讨论】:

      猜你喜欢
      • 2017-07-28
      • 2017-06-30
      • 1970-01-01
      • 2019-10-13
      • 2017-03-08
      • 2019-09-23
      • 2015-09-16
      • 1970-01-01
      • 2012-06-26
      相关资源
      最近更新 更多