python - 如何创建缺少年份的新行并用当前行填充它们

标签 python pandas

我有一个看起来像这样的数据集:

overflow_data={'state': ['CA', 'CA', 'HI', 'HI', 'HI', 'NY', 'NY'], 
'year':  [2010, 2013, 2010, 2012, 2016, 2009, 2013],
'value':  [1, 3, 1, 2, 3, 2, 5]}
pd.DataFrame(overflow_data)
启动数据帧:
Starting DataFrame
我想为每个州填写缺失的年份,并使用这些年份的前一年的值,因此表格如下所示:
预期输出:
How the DataFrame should look

最佳答案

我认为您正在寻找 pivot并填写:

(df.pivot('year','state','value')   # you can print this line alone to see what it does
   .ffill().bfill()                 # fill missing the data based on the states
   .unstack()                       # transform back to original form
   .reset_index(name='value')
)
输出:
   state  year  value
0     CA  2009    1.0
1     CA  2010    1.0
2     CA  2012    1.0
3     CA  2013    3.0
4     CA  2016    3.0
5     HI  2009    1.0
6     HI  2010    1.0
7     HI  2012    2.0
8     HI  2013    2.0
9     HI  2016    3.0
10    NY  2009    2.0
11    NY  2010    2.0
12    NY  2012    2.0
13    NY  2013    5.0
14    NY  2016    5.0

备注 我刚刚意识到上面的内容与您的要求略有不同。它只将数据生成到 所有可用年份 在数据中,不对连续年份的数据进行重采样。
对于您的问题,我们可以解决到reindex与 groupby:
(df.set_index('year').groupby('state')
   .apply(lambda x: x.reindex(np.arange(x.index.min(), x.index.max()+1)).ffill())
   .reset_index('state',drop=True)
   .reset_index()
)
输出:
    year state  value
0   2010    CA    1.0
1   2011    CA    1.0
2   2012    CA    1.0
3   2013    CA    3.0
4   2010    HI    1.0
5   2011    HI    1.0
6   2012    HI    2.0
7   2013    HI    2.0
8   2014    HI    2.0
9   2015    HI    2.0
10  2016    HI    3.0
11  2009    NY    2.0
12  2010    NY    2.0
13  2011    NY    2.0
14  2012    NY    2.0
15  2013    NY    5.0

关于python - 如何创建缺少年份的新行并用当前行填充它们,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65817843/

相关文章:

python - 根据索引从数据框中删除某些行

python - 基于其他列 pandas 相同值的列的数学运算

python - 验证字典列表中元素格式正确的最佳实践

python - 扭曲的 adbapi : runInteraction last_insert_id()

python - 如何撤消使用 groupby 转换的 DataFrame 并将其分配给新变量

python - 删除 pandas 中行的一部分/向上移动行的一部分?对齐列标题

python - 从包含列表的嵌套字典创建数据框

python - for 循环中的扩展条件

python - 运行 python 脚本时出错 - 语法无效

python - 在 pandas 数据框列中查找特定文本