gpt4 book ai didi

python - 在 Pandas 的层次索引的一个级别上重新索引和填充

转载 作者:太空狗 更新时间:2023-10-29 23:59:25 26 4
gpt4 key购买 nike

我有一个带有两级层次索引('item_id' 和 'date')的 pandas 数据框。每行包含特定月份中特定项目的各种指标的列。这是一个示例:

                    total_annotations  unique_tags
date item_id
2007-04-01 2 30 14
2007-05-01 2 32 16
2007-06-01 2 36 19
2008-07-01 2 81 33
2008-11-01 2 82 34
2009-04-01 2 84 35
2010-03-01 2 90 35
2010-04-01 2 100 36
2010-11-01 2 105 40
2011-05-01 2 106 40
2011-07-01 2 108 42
2005-08-01 3 479 200
2005-09-01 3 707 269
2005-10-01 3 980 327
2005-11-01 3 1176 373
2005-12-01 3 1536 438
2006-01-01 3 1854 497
2006-02-01 3 2206 560
2006-03-01 3 2558 632
2007-02-01 3 5650 1019

如您所见,每个项目的所有连续月份都没有观测值。我想要做的是重新索引数据框,以便每个项目都有指定范围内每个月的行。现在,对于任何给定的项目,这都很容易实现。因此,对于 item_id 99,例如:

baseDateRange = pd.date_range('2005-07-01','2013-01-01',freq='MS')
data.xs(99,level='item_id').reindex(baseDateRange,method='ffill')

但是使用这种方法,我必须遍历所有 item_id,然后将所有内容合并在一起,这看起来过于复杂了。

那么我如何将其应用于完整的数据框,填充观察结果(还有 item_id 索引),以便每个 item_id 都正确填充了 baseDateRange 中所有日期的行?

最佳答案

基本上对于每个你想要重新索引和填充的组。 apply 传递了一个数据框,该数据框的 item_id 和 date 仍在索引中,因此重置,然后设置并重新索引并填充。idx 是上面的 baseDateRange。

In [33]: df.groupby(level='item_id').apply(
lambda x: x.reset_index().set_index('date').reindex(idx,method='ffill')).head(30)
Out[33]:
item_id annotations tags
item_id
2 2005-07-01 NaN NaN NaN
2005-08-01 NaN NaN NaN
2005-09-01 NaN NaN NaN
2005-10-01 NaN NaN NaN
2005-11-01 NaN NaN NaN
2005-12-01 NaN NaN NaN
2006-01-01 NaN NaN NaN
2006-02-01 NaN NaN NaN
2006-03-01 NaN NaN NaN
2006-04-01 NaN NaN NaN
2006-05-01 NaN NaN NaN
2006-06-01 NaN NaN NaN
2006-07-01 NaN NaN NaN
2006-08-01 NaN NaN NaN
2006-09-01 NaN NaN NaN
2006-10-01 NaN NaN NaN
2006-11-01 NaN NaN NaN
2006-12-01 NaN NaN NaN
2007-01-01 NaN NaN NaN
2007-02-01 NaN NaN NaN
2007-03-01 NaN NaN NaN
2007-04-01 2 30 14
2007-05-01 2 32 16
2007-06-01 2 36 19
2007-07-01 2 36 19
2007-08-01 2 36 19
2007-09-01 2 36 19
2007-10-01 2 36 19
2007-11-01 2 36 19
2007-12-01 2 36 19

关于python - 在 Pandas 的层次索引的一个级别上重新索引和填充,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19529994/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com