Кадры данных Pandas: получение элемента в столбце по месяцам в индексе Datetime? - PullRequest
0 голосов
/ 27 апреля 2018

Мне удалось сгруппировать фрейм данных по месяцу Datetime, выполнив это:

df.set_index('Date').groupby(pd.Grouper(freq='M')).sum()

Данные выглядят так:

           price, debt
2018-4-30, 40.0, 50,0
2018-5-31, 10.0, 0.0
2018-6-30, 30.0, 0.0
2018-7-31, 30.0, 10.0

Когда я запускаю print(df.index), это дает мне следующее:

DatetimeIndex(['2018-04-30', '2018-05-31', '2018-6-30', '2018-7-31'], dtype='datetime64[ns]', name='Date', freq='M')

Есть ли способ сопоставить столбец по месяцу / году в индексе? Итак, если бы я хотел получить цену в июле 2018 года, она вернется 30.0. Если нет, каков наилучший способ сделать это? Спасибо.

1 Ответ

0 голосов
/ 27 апреля 2018

Используйте частичное индексирование строк по годам и месяцам с item для преобразования одного элемента Series в скаляр:

print(df['2018-07']['price'].item())
30.0

Или используйте группировку по MS для начала строки и выберите по loc с первым днем:

df = df.set_index('Date').groupby(pd.Grouper(freq='MS')).sum()
print (df)
            price  debt
Date                   
2018-04-01   40.0  50.0
2018-05-01   10.0   0.0
2018-06-01   30.0   0.0
2018-07-01   30.0  10.0

print(df.loc['2018-07-01', 'price'])
30.0

Другим решением является преобразование даты / месяца в период to_period:

df['Date'] = df['Date'].dt.to_period('M')
df = df.groupby('Date').sum()
print (df)
         price  debt
Date                
2018-04   40.0  50.0
2018-05   10.0   0.0
2018-06   30.0   0.0
2018-07   30.0  10.0

print (df.loc['2018-07', 'price'])
30.0

Если использовать какую-то старую версию панд, также работающую (спасибо Александр ):

df.loc['2018-07', 'price']

но в pandas 0.22.0 получите:

KeyError: 'метка [2018-07] отсутствует в [index]'

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...