加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

python – Pandas:groupby转发填充日期时间索引

发布时间:2020-12-20 12:11:02 所属栏目:Python 来源:网络整理
导读:我有一个包含两列的数据集:company和value. 它有一个日期时间索引,其中包含重复项(在同一天,不同的公司具有不同的值).这些值缺少数据,因此我想使用同一公司的前一个数据点转发缺少的数据. 但是,我似乎无法找到一个很好的方法来做到这一点,而不会遇到奇怪的g
我有一个包含两列的数据集:company和value.
它有一个日期时间索引,其中包含重复项(在同一天,不同的公司具有不同的值).这些值缺少数据,因此我想使用同一公司的前一个数据点转发缺少的数据.

但是,我似乎无法找到一个很好的方法来做到这一点,而不会遇到奇怪的groupby错误,这表明我做错了什么.

玩具数据:

a = pd.DataFrame({'a': [1,2,None],'b': [12,None,14]})
a.index = pd.DatetimeIndex(['2010','2011','2012'])  
a = a.unstack() 
a = a.reset_index().set_index('level_1') 
a.columns = ['company','value'] 
a.sort_index(inplace=True)

尝试的解决方案(不起作用:ValueError:无法从重复的轴重新索引):

a.groupby('company').ffill() 
a.groupby('company')['value'].ffill() 
a.groupby('company').fillna(method='ffill')

Hacky解决方案(提供所需的结果,但显然只是一个丑陋的解决方法):

a['value'] = a.reset_index().groupby(
    'company').fillna(method='ffill')['value'].values

可能有一种简单而优雅的方式来做到这一点,这是如何在熊猫中进行的?

解决方法

您可以将“公司”添加到索引中,使其独一无二,并通过groupby执行简单的ffill:

a = a.set_index('company',append=True)
a = a.groupby(level=1).ffill()

从这里开始,如有必要,可以使用reset_index将索引恢复为正好日期.我建议将’company’作为索引的一部分(或者只是将其添加到索引中),因此您的索引仍然是唯一的:

a = a.reset_index(level=1)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读