Как динамически обновлять значения строк в столбце Pandas Dataframe? - PullRequest
0 голосов
/ 27 февраля 2020

У меня есть CSV-файл статистики преступности ФБР. Он сгруппирован по штатам, а затем по городам. Проблема состоит в том, что каждое состояние имеет только одну строку на группу, поэтому после первого состояния каждое последующее значение для этой серии равно NaN до следующего состояния.

Мой код на данный момент - это только то, что я загружаю CSV с помощью функции pandas read_csv, я обрезал последние несколько строк, потому что они не имеют значения.

crime = pd.read_csv('crime-stats-by-state-and-city-2010.csv', nrows=9310)
# df looks like:
            city       |   etc...
state
ALABAMA     Abbeville
NaN         Adamsville
NaN         Addison
...         ...
CALIFORNIA  Adelanto
NaN         Alameda

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

Предпочел бы советы / подсказки / объяснения, а не просто код, но нищие не могут быть выбирающими.

Ответы [ 2 ]

0 голосов
/ 28 февраля 2020

Изначально я думал об использовании reindex (method = 'ffill') , но это применимо только в случаях, когда индекс монотонно увеличивается или уменьшается.

Поскольку у нас нет никаких гарантий Что касается порядка индексов, мы должны использовать трехэтапный подход:

  • сбросить индекс (сделать состояние обычный столбец),
  • вызов ffill в этом столбце,
  • установить индекс обратно в состояние .

Код для этого:

df.reset_index(inplace=True)
df.state = df.state.ffill()
df.set_index('state', inplace=True)
0 голосов
/ 28 февраля 2020

Попробуйте что-то вроде:

df.reset_index(inplace=True)
df['state'].fillna(method='ffill', inplace=True) 
...