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 getKeyError:'标签[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']