所以我有很多公开交易股票的数据。每个数据行都包含一个id,一个日期和一些其他信息。当然,股票可能在数据框中出现多次(即Google可能有几个条目对应于价格更新的不同日期)。
我希望能够对id进行排序,然后对每个排序的块排序日期。
注意:为了示例,排序按升序完成。
id date price
0 123 2015/01/13 x
1 114 2017/02/15 y
2 12 2016/12/02 z
3 123 1996/04/26 w
4 114 2014/02/23 u
5 114 1995/05/25 v
对ID进行排序:
id date price
0 12 2016/12/02 z
1 123 2015/01/13 x
2 123 1996/04/26 w
3 114 2017/02/15 y
4 114 2014/02/23 u
5 114 1995/05/25 v
在固定ID时对日期进行排序会给出:
id date price
0 12 2016/12/02 z
1 123 1996/04/26 w
2 123 2015/01/13 x
3 114 1995/05/25 v
4 114 2014/02/23 u
5 114 2017/02/15 y
答案 0 :(得分:6)
您似乎需要DataFrame.sort_values
:
df['date'] = pd.to_datetime(df['date'])
df = df.sort_values(['id','date'])
print (df)
id date price
2 12 2016-12-02 z
5 114 1995-05-25 v
4 114 2014-02-23 u
1 114 2017-02-15 y
3 123 1996-04-26 w
0 123 2015-01-13 x
如果id
列为string
:
df['id'] = df['id'].astype(str)
df['date'] = pd.to_datetime(df['date'])
df = df.sort_values(['id','date'])
print (df)
id date price
5 114 1995-05-25 v
4 114 2014-02-23 u
1 114 2017-02-15 y
2 12 2016-12-02 z
3 123 1996-04-26 w
0 123 2015-01-13 x
您还可以对一列降序和另一列升序进行排序:
df['id'] = df['id'].astype(str)
df['date'] = pd.to_datetime(df['date'])
df = df.sort_values(['id','date'], ascending=[False, True])
print (df)
id date price
3 123 1996-04-26 w
0 123 2015-01-13 x
2 12 2016-12-02 z
5 114 1995-05-25 v
4 114 2014-02-23 u
1 114 2017-02-15 y