J. *_*Doe 5 python sorting pandas
我试图通过保持索引以特定顺序对值进行排序。
from random import randint
import pandas as pd
days = ["Tuesday", "Thursday", "Monday", "Wednesday"]
a = pd.DataFrame({"Value": [randint(0, 9) for i in range(len(days)*5)],
"Year": [y for i in range(len(days)) for y in range(2014,2019)]},
index=[day for day in days for i in range(5)])
myorder = ["Monday", "Tuesday", "Wednesday", "Thursday"]
a.index = pd.CategoricalIndex(a.index, categories=myorder, ordered=True)
a = a.sort_index()
Run Code Online (Sandbox Code Playgroud)
通过申请,a.sort_index()我得到了我的特定订单。但是,的值Year是随机的。如果我们天真a.sort_values(["Year"]),它会再次修改index顺序。如何Year通过保持初始index顺序对值进行排序?
您需要从索引创建列并一起排序:
a = a.reset_index().sort_values(['index','Year']).set_index('index').rename_axis(None)
Run Code Online (Sandbox Code Playgroud)
或者从列创建MultiIndex并一起排序:
a = (a.set_index('Year', append=True)
.sort_index()
.reset_index(level=1)
.reindex(columns=a.columns))
print (a)
Value Year
Monday 7 2014
Monday 3 2015
Monday 2 2016
Monday 5 2017
Monday 4 2018
Tuesday 6 2014
Tuesday 0 2015
Tuesday 0 2016
Tuesday 9 2017
Tuesday 2 2018
Wednesday 6 2014
Wednesday 7 2015
Wednesday 5 2016
Wednesday 5 2017
Wednesday 5 2018
Thursday 3 2014
Thursday 2 2015
Thursday 8 2016
Thursday 7 2017
Thursday 7 2018
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2796 次 |
| 最近记录: |