Python:从特定点排序

时间:2017-07-23 13:44:28

标签: python pandas sorting numpy dataframe

               Highs
Date
2017-06-01    344.88
2017-06-02    342.88
2017-06-05    348.44
2017-06-06    359.49
2017-06-07    360.50
2017-06-08    371.90
2017-06-09    376.87
2017-06-12    364.50
2017-06-13    376.00
2017-06-14    384.25
2017-06-15    375.46

我想以这种方式对这些数据进行排序, 例如,我有一个值。 2017-06-09 376.87我想开始按照特定值的索引(2017-06-09)按降序排序值。但是我想限制sort函数在2017-06-09索引之前访问或迭代,我的意思是,它应该排序或访问这些日期或值

2017-06-05    348.44
2017-06-06    359.49
2017-06-07    360.50
2017-06-08    371.90

并且仅在2017-06-09之后对值进行排序或访问。

  

修改1

正在使用,

df = web.DataReader('TSLA', 'google', start, end)
Highs = df['High'] # Getting only the values from the 'High' Column

Highest_high = sorted(Highs)[-1]  # returns second highest value
for a, b in enumerate(array):
    if b == highest:
        Highests_index = b

Highests _index返回0,1,2等值,而不是像2017-06-01这样的日期 我怎么能用像0,1,2 ..这样的索引对它们进行排序?根据我之前解释的标准?

  

编辑2:

现在我知道如何从特定的索引开始排序,但是他们还有1个小问题,
如果d = 2017-06-02我们使用df.loc[d:, 'High']= df.loc[d:,'High'].sort_values().values从那一点开始排序。但是如果我想按照d + 5(2017-06-02 + 5)开始排序,那么我可以从2017-06-09 5索引开始。 因为日期无法添加。

注意日期(索引)是日期时间格式。

2 个答案:

答案 0 :(得分:2)

您需要locsort_values,但在排序index值后,因此需要values来分配numpy数组:

print (df.loc['2017-06-09':,'Highs'].sort_values())
Date
2017-06-12    364.50
2017-06-15    375.46
2017-06-13    376.00
2017-06-09    376.87
2017-06-14    384.25
Name: Highs, dtype: float64

df.loc['2017-06-09':, 'Highs']= df.loc['2017-06-09':,'Highs'].sort_values().values
print (df)
             Highs
Date              
2017-06-01  344.88
2017-06-02  342.88
2017-06-05  348.44
2017-06-06  359.49
2017-06-07  360.50
2017-06-08  371.90
2017-06-09  364.50
2017-06-12  375.46
2017-06-13  376.00
2017-06-14  376.87
2017-06-15  384.25

编辑:

要检查第二大索引值,请使用sort_values,然后按[-2]选择:

d = df['Highs'].sort_values().index[-2]
print (d)
2017-06-09 00:00:00

df.loc[d:, 'Highs']= df.loc[d:,'Highs'].sort_values().values
print (df)
             Highs
Date              
2017-06-01  344.88
2017-06-02  342.88
2017-06-05  348.44
2017-06-06  359.49
2017-06-07  360.50
2017-06-08  371.90
2017-06-09  364.50
2017-06-12  375.46
2017-06-13  376.00
2017-06-14  376.87
2017-06-15  384.25

答案 1 :(得分:1)

df.loc['2017-06-09':,] = df.loc['2017-06-09':,].sort_values(by = 'highs')