Получить предыдущие строки на основе условия if и функции Shift - Python dataframe - PullRequest
0 голосов
/ 29 мая 2019

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

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

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

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

enter image description here

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

enter image description here

Я пытался использовать функцию shift (-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

1 Ответ

1 голос
/ 29 мая 2019

Использование:

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...