填写缺失的数据Python

时间:2018-11-13 16:58:37

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

在数据帧的数月至数月之间,我丢失了很多数据,如下所示:

    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年之间,所以我只需要填写空白即可。 / p>

所需的输出(对于NJ,但所有状态都需要)为:

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

我无法理解这种方法为何能奏效,因为我已经在具有实际结果的其他数据上对其进行了测试。

1 个答案:

答案 0 :(得分:1)

对所有花时间纠正此问题的人表示抱歉。这只是一个偶然的错误分组的简单问题。

我以前是根据状态变量的集合(而不是国家本身)创建的'Region'列。

因此需要澄清:

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

需要更改为:

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

此方法正常工作。