0

我有一个熊猫数据框(dfm),我想每天获取最小值,并按天对结果进行排序。还有更多 - 10 月 4 日或 6 月 7 日....等。

dfmn
  count      Month  Day  Data_Value
    1        Nov   26          11
    3        Oct    4         178
    4        Nov   28          94
    5        Aug    6         144
    8        Jun    7          89
    9        Jan   25          33
    10       Mar   30          72
    11       Oct   14         106
    13       May   21          89
    17       Mar   27          44
    20       Sep   17         100
    21       Aug    4         194
    22       Jan   26          61
    24       Jun    7         100
    31       Sep   28         117
    32       Oct    1         139
    37       Apr   22          78
    39       Aug    4         200
    40       Jan   24          33
    45       Jun    4         150
    47       Oct   22         100
    49       Sep   14          94
    51       Mar   15          22
    52       Nov   25          50
    53       Oct   15         144
    55       Mar   30         106
    59       Jan   19          94
    60       Feb   28          78
    61       Aug    4         133
    62       Jun   14         117
    64       Mar   14          44
    66       Sep   18         106

我做了以下操作,现在我的结果集对于每个月/日组合都有 min 但它不是按月日排序的,pandas 可能使用英文字母排序规则进行排序。

dfmn.groupby (["Month","Day"]).min()

          Data_Value
Month Day            
Apr   1          23.9
      2          24.4
      3          29.4
      4          32.2
      .          .
      .          .
 Aug  1          25.2
      2          33.1

我需要

Jan   1          21.9
      2          20.4
      3          20.4
      4          14.2
      .          .
      .          .
 Feb  1          15.2
      2          13.1

我怎样才能做到这一点?

4

1 回答 1

2

您可以设置Month为一年中所有月份的有序分类:

months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']

df['Month'] = pd.Categorical(df['Month'], categories = months, ordered=True)

然后,当你做你的 groupby 时,它们将被订购:

>>> df.groupby(["Month","Day"]).min()
           count  Data_Value
Month Day                   
Jan   1      NaN         NaN
      4      NaN         NaN
      6      NaN         NaN
      7      NaN         NaN
      14     NaN         NaN
      15     NaN         NaN
      17     NaN         NaN
      18     NaN         NaN
      19    59.0        94.0
      21     NaN         NaN
      22     NaN         NaN
      24    40.0        33.0
      25     9.0        33.0
      26    22.0        61.0
      27     NaN         NaN
      28     NaN         NaN
      30     NaN         NaN
Feb   1      NaN         NaN
      4      NaN         NaN
      6      NaN         NaN
      7      NaN         NaN
      14     NaN         NaN
.....

calendar不过,从模块中获取月份缩写可能会更容易:

import calendar

months = [calendar.month_abbr[i] for i in range(1,13)]

>>> months
['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']
于 2018-08-28T19:59:31.310 回答