Создать функцию Pandas / NumPy, чтобы найти, когда значения в серии меняются? - PullRequest
1 голос
/ 29 октября 2019

Внутри DataFrame у меня есть столбец «Состояния», который описывает, где произошли различные события, поэтому многие строки повторяются, а затем переходят в другое состояние:

States
- California
- California
- California
- California
- California
- New Mexico
- New Mexico
- New Mexico
- Hawaii
- California

Я пытаюсь запуститьФункция pandas, которая назначит переменную каждому состоянию, но будет уникальной для каждого изменения состояния. Таким образом, даже если состояния повторяются, они не получат того же значения, что и в последний раз, когда они находятся в списке. Из приведенного выше примера я получу:

new_column
- 1
- 1
- 1
- 1
- 1
- 2
- 2
- 2
- 3
- 4 #even though this is 'California', it's a new,unique value

В настоящее время я пробовал

def new_id(stateVal):
    x = Kentucky #first state in the list that I'm comparing to
    y = 1 #the unique value
    if stateVal == x:
        return y
    elif stateVal != x:
        x == w
        y++
        return y
    else:
        return 0

И не получил его, чтобы он работал должным образом, когда я применяю его к столбцу STATE вмой набор данныхЕсть ли в Pandas или NumPy предопределенная функция, чтобы помочь с этим?

1 Ответ

2 голосов
/ 29 октября 2019

вы можете сделать это следующим образом, сравнивая каждый элемент со следующим:

count=1
for i,row in enumerate(df['state'] == df['state'].shift(-1)):
    if row:
        df.at[i,'new_column'] = count
    else:
        df.at[i,'new_column'] = count
        count+=1

df['new_column'] = df['new_column'].astype(int) #convert to int if necessary

может быть более чистый способ избежать цикла, но я думаю, что в принципе это то, что вы ищете

РЕДАКТИРОВАТЬ один вкладыш, дает тот же выход:

df['new_column'] = df['state'].ne(df['state'].shift()).cumsum()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...