Заполнение пропущенных значений в столбце dataframe Python - PullRequest
0 голосов
/ 11 ноября 2018

Мои данные разбиты на 4 столбца и выглядят так:

State       Year        Month        Value
AK          2010         1             10
AK          2010         3             20
AK          2011         1             28
AK          2011         5             29
AK          2011         12            31
.
.
TX          2010         2             10
TX          2010         3             11
TX          2010         4             20
TX          2010         12            22
TX          2011         4             30
TX          2011         7             33
.
.

Я хочу заполнить пропущенные Месяцы повторениями предыдущих Значений того же Года , потому что это просто кумулятивные суммы, которые я добавил вместе .

Месяцы не всегда начинаются с первого месяца * и иногда могут отсутствовать полные годы , поэтому мне нужно решить эту проблему.

Т.е .: передача может начаться на 4-м месяце 2011 года и т. Д.

Желаемый вывод выглядит так:

State       Year        Month        Value
AK          2010         1             10
AK          2010         2             10
AK          2010         3             20
AK          2010         4             20
AK          2010         5             20
.
.
AK          2010         12            20
AK          2011         1             28
AK          2011         2             28
.
.
TX          2010         1             9
TX          2010         2             10
TX          2010         3             11
TX          2010         4             20
TX          2010         5             20
.
.
TX          2010         12            22

1 Ответ

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

Одним из решений является использование Категориальных данных :

# convert Month to categorical with 1-12 range
df['Month'] = pd.Categorical(df['Month'], categories=range(1, 13))

# groupby to give Cartesian product for categorical columns
df = df.groupby(['State', 'Year', 'Month']).first().reset_index()

# forward fill by group
df['Value'] = df.groupby('State')['Value'].ffill()

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...