Выполнять итерацию по фрейму данных и создавать новый фрейм данных каждый раз, когда выполняется условие - PullRequest
0 голосов
/ 05 ноября 2019

Из запроса SQL я извлекаю список действий, которые происходят в магазине, у одного из столбцов есть метка «STATUS».

Я хочу перейти вниз по фрейму данных и вытащить всю строку каждый развремя, когда метка 'STATUS' меняется

  • Я создал фрейм данных из запроса и назвал его df
  • Изменил типы столбцов на нужные мне
  • Создан список всех заголовков столбцов
  • Использовал этот список для создания пустого фрейма данных, к которому я собирался добавить
  • Попытка создания цикла for с условием, описанным выше
    headerlist = df.columns.values.tolist() 

    newdf = pd.DataFrame(columns=headerlist)

    for index, row in df.iterrows():

        if df.STATUS[i] != df.STATUS[i-1]:
            newdf = newdf.append(i)

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

Заранее спасибо

https://imgur.com/a/XXEOlKs

Ответы [ 3 ]

0 голосов
/ 05 ноября 2019

Не уверен, что это лучший ответ: (Я тоже новичок в Python)

допустим, что ваш исходный фрейм данных - это df

for even, odd in zip(df.iloc[::2], df.iloc[1::2]):
    if even.status!=odd.status:
        #do you append here

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

0 голосов
/ 05 ноября 2019

Я думаю, что понял! Я пытался за час до публикации, и как только я написал, нажал

Это намного проще, чем цикл for.

Я создал новый столбец с именем «MATCH», который имеет логическое значение того, равно или нет новое значение «STATUS» предыдущему.

Затем я просто фильтрую поdf.STATUS == False

'' 'python df [' MATCH '] = df.STATUS.eq (df.STATUS.shift ())' ''

0 голосов
/ 05 ноября 2019

Попробуйте это

df[df['STATUS'].ne(df['STATUS'].shift().bfill())]
...