为了账号安全,请及时绑定邮箱和手机立即绑定

将日期索引的数据帧拆分为包含相关值的每月列的数据帧

将日期索引的数据帧拆分为包含相关值的每月列的数据帧

哆啦的时光机 2021-06-03 15:41:28
我有一个包含每月降雨量值的数据框,按日期索引。这是一个简短的片段:      date  ppt      ...2016-11-30  253.3799932016-12-31  52.7099982017-01-31  9.0300002017-02-28  10.0500002017-03-31  16.5600002017-04-30  45.5099982017-05-31  103.829997      ...我需要为每个月生成一个包含列的新数据框,其中包含 syudy 期间(20 年)内每个相关月份的值。例如..    Jan   Feb    Mar   Apr   May  ...  0   12345...任何人都可以帮忙吗?谢谢!编辑:到目前为止我已经尝试过这个:df.pivot_table(index=df.date.dt.year, columns=df.date.dt.month, values='ppt')但它返回这个错误,尽管我明确地将索引设置为日期时间......---------------------------------------------------------------------------AttributeError                            Traceback (most recent call last)<ipython-input-49-9cc1ff01344d> in <module>()     29 Trmm_1M.index = pd.to_datetime(Trmm_1M.index)     30 ---> 31 TRMM_MONTHS = Trmm_1M.pivot_table(index=Trmm_1M.date.dt.year, columns=Trmm_1M.date.dt.month, values='ppt3') 32  33 # Trmm_1M~/anaconda3/lib/python3.6/site-packages/pandas/core/generic.py in __getattr__(self, name)   3079             if name in self._info_axis:   3080                 return self[name]-> 3081             return object.__getattribute__(self, name)   3082    3083     def __setattr__(self, name, value):AttributeError: 'DataFrame' object has no attribute 'date'
查看完整描述

3 回答

?
梦里花落0921

TA贡献1772条经验 获得超6个赞

为月份和年份分配一列,并使用pivot:


df.assign(month=df.date.dt.month,year=df.date.dt.year).pivot('year','month','ppt')

在您的情况下,这给出:


month    1      2      3          4           5           11         12

year                                                                   

2016    NaN    NaN    NaN        NaN         NaN  253.379993  52.709998

2017   9.03  10.05  16.56  45.509998  103.829997         NaN        NaN


查看完整回答
反对 回复 2021-06-16
?
偶然的你

TA贡献1841条经验 获得超3个赞

使用pivot_table:


df.pivot_table(index=df.date.dt.year, columns=df.date.dt.month, values='ppt')

date    1      2      3          4           5           11         12

date

2016   NaN    NaN    NaN        NaN         NaN  253.379993  52.709998

2017  9.03  10.05  16.56  45.509998  103.829997         NaN        NaN


查看完整回答
反对 回复 2021-06-16
?
函数式编程

TA贡献1807条经验 获得超9个赞

在无法执行上述建议后,我设法找到了解决方法。虽然它涉及更多步骤,但无法找出问题所在的挫败感远远超过了额外代码行的努力......


df['M'] = df.index.month  #extracting month and years and creating new columns

df['Y'] = df.index.year

df_pivot = df.pivot_table(index=df.Y, columns=df.M, values='ppt') #pivot with these columns, rather than the index

不过还是谢谢大家的建议:)


查看完整回答
反对 回复 2021-06-16
  • 3 回答
  • 0 关注
  • 133 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号