微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

我有一个包含两列的数据集: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)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐