【问题标题】:Filling in missing data Python填补缺失数据Python
【发布时间】:2018-11-13 16:58:37
【问题描述】:

在我的数据框的几年和几个月之间,我有很多缺失的数据,如下所示:

    Year    Month   State        Value  
    1969    12        NJ         5500    
    1969    12        NY         6418     
    1970    8         IL         10093  
    1970    12        WI         6430      
    1970    7         NY         6140           
    1971    10        IL         10093          
    1971    6         MN         6850            
    1971    3         SC         7686          
    1972    12        FL         8772     
    2016    1         NJ         9000

对于每个州,我需要填写从年初到 2018 年的所有缺失数据,但唯一存在的数据大多在 1969 年至 1990 年之间,所以我只需要填写空白即可。

所需的输出(对于新泽西州,但所有州都需要)是:

Year    Month   State        Value  
1969    12        NJ         5500
1970    1         NJ         5500
1970    2         NJ         5500
1970    3         NJ         5500
1970    4         NJ         5500
1970    5         NJ         5500
1970    6         NJ         5500
.
.
1970    12        NJ         5500
.
.
2010    1         NJ         5500
2010    2         NJ         5500
2010    3         NJ         5500
.
.
2018    1         NJ         9000

我尝试将月份转换为 1-12 个月的分类值,重新组合并重置索引,然后使用 ffill 将这些值划分为新创建的列索引,例如:

df['Month'] = pd.Categorical(df['Month'], categories=range(1, 13))
df = df.groupby(['State', 'Year', 'Month']).first().reset_index()
df['Value'] = df.groupby('Region')['Value'].ffill()

但是这个方法给了我像这样的 NaN 值:

State   Year    Month   Value
NJ      1969    12      5500.0
NJ      1970    1       nan
NJ      1970    2       nan
NJ      1970    3       nan
.
.
NJ      2016    1       9000.0

我不明白为什么这种方法以前有效,因为我已经在其他数据上进行了实际结果的测试。

【问题讨论】:

  • 问题中没有提到Region列,它从哪里来?
  • 这是我从每个不应该存在的州中建立的类别。
  • 那么,当问题中未包含该问题并随后将其发布到您自己的答案中时,读者如何知道您在哪里以及如何构建它?问题本身似乎没有偏离轨道?看到问题和答案,一切都令人困惑和矛盾。
  • 我将更改我的问题以在我的答案中包含“区域”错误和更多信息,以澄清问题所在,因为我现在无法删除此问题。希望这就足够了。
  • 所做的更改。谢谢你,@pygo。

标签: python python-3.x pandas dataframe missing-data


【解决方案1】:

对所有花时间纠正此问题的人深表歉意。这是一个不小心按错误列分组的简单问题。

我之前创建了一个 'Region' 列,该列基于一组调用的 State 变量而不是 State 本身。

所以澄清一下:

df['Value'] = df.groupby('Region')['Value'].ffill()

需要改成:

df['Value'] = df.groupby('State')['Value'].ffill()

这个方法可以正常工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-11
    • 2018-08-14
    • 2018-06-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多