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) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |