我尝试按索引中的星期几对数据框进行排序。我能够创建一个解决方法,我创建了一个额外的列,我手动将正确的订单值分配给然后排序。但必须有更好的方法,特别是当我处理可能更多的日期值时。
dict = {'Monday': Monday/MonCount, 'Tuesday': Tuesday/TueCount, 'Wednesday': Wednesday/WedCount, 'Thursday': Thursday/ThuCount, 'Friday': Friday/FriCount}
df = pd.Series(dict, name='DailyValue')
dff = DataFrame(df)
dff['Day'] = dff.index
dff['Sorter'] = [5,1,4,2,3]
dff.sort_values(by = ['Sorter'], inplace = True)
#dff.sort(['Day'], ascending = True)
dff.plot(kind='bar', grid = True, y = ['DailyValue'])
plt.show()
答案 0 :(得分:1)
您可以使用列表推导在索引中生成工作日(即0-6),然后根据这些值创建一个系列。您可以按这些工作日值对此系列进行排序并获取索引。然后使用ix
根据此排序索引索引原始系列。
import numpy as np
import pandas as pd
s = pd.Series(np.random.randn(14), index=pd.date_range('2016-1-1', periods=14))
s
Out[34]:
2016-01-01 0.915488
2016-01-02 -1.053409
2016-01-03 -1.826033
2016-01-04 0.559250
2016-01-05 -0.278086
2016-01-06 0.041113
2016-01-07 1.076463
2016-01-08 0.942720
2016-01-09 -0.850388
2016-01-10 -0.649713
2016-01-11 2.769957
2016-01-12 0.498103
2016-01-13 1.098085
2016-01-14 0.699077
Freq: D, dtype: float64
idx = pd.Series([d.weekday() for d in s.index]).sort_values().index
s.ix[idx]
Out[36]:
2016-01-04 0.559250
2016-01-11 2.769957
2016-01-05 -0.278086
2016-01-12 0.498103
2016-01-06 0.041113
2016-01-13 1.098085
2016-01-07 1.076463
2016-01-14 0.699077
2016-01-01 0.915488
2016-01-08 0.942720
2016-01-02 -1.053409
2016-01-09 -0.850388
2016-01-03 -1.826033
2016-01-10 -0.649713
dtype: float64
作为一个班轮......
s_new = s.ix[pd.Series([d.weekday() for d in s.index]).sort_values().index]
对于数据帧完全相同。
df_new = df.ix[pd.Series([d.weekday() for d in df.index]).sort_values().index]