Python 熊猫数据帧:在Datetime索引中按月获取列中的元素?

Python 熊猫数据帧:在Datetime索引中按月获取列中的元素?,python,pandas,Python,Pandas,我已成功地按日期时间月对数据帧进行分组,执行以下操作: 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(['

我已成功地按日期时间月对数据帧进行分组,执行以下操作:

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年7月获得价格,它将返回
30.0
。如果没有,最好的方法是什么?谢谢。

按年份和月份使用,用于将一个元素
系列
转换为标量:

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
另一种解决方案是通过以下方式将datetimes转换为月份周期:

如果使用一些旧版本的熊猫也能工作(谢谢):

但是在
pandas 0.22.0
get中:

KeyError:“标签[2018-07]不在[索引]中”


考虑到每个月只有一个日期,只需使用
df.loc['2018-07','price']
就可以了,否?@Alexander-没有datetimeindex.@Alexander get
KeyError:'标签[2018-07]不在[index]中'
我使用的是熊猫的旧版本(0.17.1,不要问…),而且效果很好。
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']