Как получить n предыдущих строк в pandas после использования loc?

У нас есть данные, отражающие историю выставления счетов работникам, выплаты и штрафы после их рабочих смен. Иногда наказание для работника неправильное, потому что у него были технические проблемы с мобильным приложением, а на самом деле он присутствовал на работе. Позже ему возмещают его штраф, который идет с описанием 'balance_correction'. Цель состоит в том, чтобы показать n строк (строк) в данных, чтобы найти закономерность, за что он получил штраф. Итак, вот данные:

d = {'balance_id': [70775,70775 ,70775,70775,70775], 'amount': [2500, 2450,-500,500,2700]
     ,'description':['payment_for_job_order_080ecd','payment_for_job_order_180eca'
                     ,'penalty_for_being_absent_at_job','balance_correction','payment_for_job_order_120ecq']}
df1 = pd.DataFrame(data=d)
df1


    balance_id amount   description
0    70775     2500       payment_for_job_order_080ecd
1    70775     2450       payment_for_job_order_180eca
2    70775     -500       penalty_for_being_absent_at_job
3    70775     500        balance_correction
4    70775     2700       payment_for_job_order_120ecq

Я пробую это:

df1.loc[df1['description']=='balance_correction'].iloc[:-2]

и ничего не получить. Также использование смены не помогает. Если нам нужно показать 2 косули, результат должен быть

    balance_id  amount  description
1   70775     2450      payment_for_job_order_180eca
2   70775     -500      penalty_for_being_absent_at_job

Что может решить проблему?

Потому что есть только одна строка, где df1['description']=='balance_correction', поиском .iloc[:-2] вы отсекаете все данные. Что делает этот iloc, так это возвращает все данные, кроме двух последних строк. Поскольку имеется только одна строка, вы эффективно пропускаете эту строку (поскольку она находится в пределах двух последних). Если вы хотите, чтобы отображались первые две строки, используйте вместо них .iloc[:2].

S Rawson 10.04.2022 17:58

А если вам нужны последние две строки, используйте .iloc[-2:].

S Rawson 10.04.2022 17:59

Чего вы хотите, непонятно. Вы хотите определить строки, которые предшествуют наказанию?

mozway 10.04.2022 18:00
Анализ настроения постов в Twitter с помощью Python, Tweepy и Flair
Анализ настроения постов в Twitter с помощью Python, Tweepy и Flair
Анализ настроения текстовых сообщений может быть настолько сложным или простым, насколько вы его сделаете. Как и в любом ML-проекте, вы можете выбрать...
7 лайфхаков для начинающих Python-программистов
7 лайфхаков для начинающих Python-программистов
В этой статье мы расскажем о хитростях и советах по Python, которые должны быть известны разработчику Python.
Установка Apache Cassandra на Mac OS
Установка Apache Cassandra на Mac OS
Это краткое руководство по установке Apache Cassandra.
Сертификатная программа "Кванты Python": Бэктестер ансамблевых методов на основе ООП
Сертификатная программа "Кванты Python": Бэктестер ансамблевых методов на основе ООП
В одном из недавних постов я рассказал о том, как я использую навыки количественных исследований, которые я совершенствую в рамках программы TPQ...
Создание персонального файлового хранилища
Создание персонального файлового хранилища
Вы когда-нибудь хотели поделиться с кем-то файлом, но он содержал конфиденциальную информацию? Многие думают, что электронная почта безопасна, но это...
Создание приборной панели для анализа данных на GCP - часть I
Создание приборной панели для анализа данных на GCP - часть I
Недавно я столкнулся с интересной бизнес-задачей - визуализацией сбоев в цепочке поставок лекарств, которую могут просматривать врачи и...
0
3
27
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Если индекс вашего фрейма данных является последовательным (0, 1, 2, 3,...), вы можете фильтровать по индексу:

idx = df1.loc[df1['description'] == 'balance_correction'].index
df1.loc[(idx - 2).append(idx - 1)]

Другие вопросы по теме