Извлекать предыдущие строки на основе условия if и функции Shift — фрейм данных Python

У меня есть данные, как показано ниже. Я хотел бы выбрать строки на основе двух условий.

1) строки, начинающиеся с цифр (1,2,3 и т. д.)

2) предыдущая строка записей, удовлетворяющих 1-му условию

Пожалуйста, найдите, как выглядят входные данные

Извлекать предыдущие строки на основе условия if и функции Shift — фрейм данных Python

Пожалуйста, найдите, как я ожидаю, что результат будет

Извлекать предыдущие строки на основе условия if и функции Shift — фрейм данных Python

Я пытался использовать функцию сдвига (-1), но, похоже, она выдает ошибку. Я уверен, что перепутал логику/синтаксис. Пожалуйста, найдите код ниже, который я пробовал

 # i get the index of all records that start with number.    
 s=df1.loc[df1['VARIABLE'].str.contains('^\d')==True].index 
 # now I need to get the previous record of each group but this is 
                                                         #incorrect
 df1.loc[((df1['VARIABLE'].shift(-1).str.contains('^\d')==False) & 
 (df1['VARIABLE'].str.contains('^\d')==True))].index
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
0
144
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

Использовать:

df1 = pd.DataFrame({'VARIABLE':['studyid',np.nan,'age_interview','Gender','1.Male',
                                '2.Female',np.nan, 'dob', 'eth',
                                'Ethnicity','1.Chinese','2.Indian','3.Malay']})

#first remove missing rows by column VARIABLE
df1 = df1.dropna(subset=['VARIABLE'])
#test startinf numbers
s = (df1['VARIABLE'].str.contains('^\d'))
#chain shifted values by | for OR
mask  = s | s.shift(-1)
#filtering by boolean indexing
df1 = df1[mask]
print (df1)
     VARIABLE
3      Gender
4      1.Male
5    2.Female
9   Ethnicity
10  1.Chinese
11   2.Indian
12    3.Malay

в операции сдвига по цепочке возвращает ли True + Nan True? Я вижу, что результат равен True, но можете ли вы поделиться какой-либо ссылкой, где я могу прочитать это сравнение между логическим значением и значением Nan. 2) Можете ли вы также сообщить мне, как df1 [маска] возвращает 6 записей, соответствующих значению «Истина». Я понимаю, что «маска» из-за операции сдвига цепи имеет 6 «истинных» записей. Как, когда я использую эту маску в качестве ключа к df1, возвращает соответствующие 6 записей. Он использует индекс?

The Great 30.05.2019 04:40

ваши комментарии будут полезны. Когда я применяю это к большому набору данных, он игнорирует значения False и выбирает только соответствующие записи со значением True.

The Great 30.05.2019 04:45

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