Заполнение недостающих данных Python - PullRequest
0 голосов
/ 13 ноября 2018

У меня много пропущенных данных между годами и месяцами моего кадра данных, который выглядит следующим образом:

    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

Я не могу понять, почему этот метод работал раньше, так как я проверял его на других данных с реальными результатами.

1 Ответ

0 голосов
/ 13 ноября 2018

Извините всех, кто нашел время, чтобы исправить это.Это было просто случайная группировка по ложному столбцу.

Ранее я создал столбец 'Region' на основе набора переменных состояния, который вызывался, а не сами состояния.

Чтобы уточнить:

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

Необходимо изменить на:

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

Этот метод работает правильно.

...