按熊猫系列中的两列排序

时间:2019-07-12 12:45:17

标签: python pandas

在我之前提出的问题上稍作改动。我设法找到一种解决方案,可以按我的熊猫系列中的特定列对值进行排序。但是,问题在于,纯粹按时间排序无法让我考虑发生时间的不同日期。我知道我可以对订单进行硬编码并使用.loc来应用订单,但是我想了解是否存在一种更简单的解决方案,可以按周(最早的一周先到)和按时间(每周0-23小时)进行排序

这是我再次获得的数据框示例:

weeknum   time_hour
16-22Jun  0.0           5
2-8Jun    0.0           3
23-29Jun  0.0          11
9-15Jun   0.0           3
16-22Jun  1.0           3
2-8Jun    1.0           6
23-29Jun  1.0           3
9-15Jun   1.0           8
16-22Jun  2.0           3
2-8Jun    2.0           6
23-29Jun  2.0           3
16-22Jun  3.0           4
2-8Jun    3.0           2
23-29Jun  3.0           3
9-15Jun   3.0           4
16-22Jun  4.0           2
2-8Jun    4.0           7
23-29Jun  4.0           1
9-15Jun   4.0           7
16-22Jun  5.0           2
2-8Jun    5.0           9
23-29Jun  5.0           9
9-15Jun   5.0          12
16-22Jun  6.0           5
2-8Jun    6.0          12
23-29Jun  6.0           6
9-15Jun   6.0          14
16-22Jun  7.0          12
2-8Jun    7.0          17
23-29Jun  7.0          19

这是我的代码:

merged_clean.groupby('weeknum')['time_hour'].value_counts().sort_index(level=['time_hour'])

1 个答案:

答案 0 :(得分:2)

使用函数sorted by multiple keysMultiIndex前的第一个数字进行转换的-进行排序,并使用DataFrame.reindex进行更改顺序:

s = merged_clean.groupby('weeknum')['time_hour'].value_counts()
idx = sorted(s.index, key = lambda x: (int(x[0].split('-')[0]), x[1]))
s = s.reindex(idx)

print (s)
weeknum   time_hour
2-8Jun    0.0           3
          1.0           6
          2.0           6
          3.0           2
          4.0           7
          5.0           9
          6.0          12
          7.0          17
9-15Jun   0.0           3
          1.0           8
          3.0           4
          4.0           7
          5.0          12
          6.0          14
16-22Jun  0.0           5
          1.0           3
          2.0           3
          3.0           4
          4.0           2
          5.0           2
          6.0           5
          7.0          12
23-29Jun  0.0          11
          1.0           3
          2.0           3
          3.0           3
          4.0           1
          5.0           9
          6.0           6
          7.0          19
Name: a, dtype: int64