Получить строки между двумя значениями столбца, используя Python - PullRequest
0 голосов
/ 07 июня 2018

Предположим, что существует кадр данных следующим образом:

df = {
'Period': [1996,'Jan','Feb','March',1997,'Jan','Feb','March',1998,'Jan','Feb','March']
'Some-Values': [,'a','b','c',,'d','e','f',,'g',h','i']
}

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

df_res = {
    'Period': ['Jan','Feb','March']
    'Some-Values': ['a','b','c']
}

В настоящее время я пытаюсь это сделать, но не могу найти решение.

Ответы [ 2 ]

0 голосов
/ 07 июня 2018

Попробуйте изменить ваш фрейм данных на «правильный» способ, тогда мы сможем получить информацию, используя информацию года

df['Year']=df.loc[df['Some-Values']=='','Period']
df.Year=df.Year.ffill()
df=df.loc[df.Period!=df.Year,:]
df.loc[df.Year==1996,:]
Out[651]: 
  Period Some-Values  Year
1    Jan           a  1996
2    Feb           b  1996
3  March           c  1996
0 голосов
/ 07 июня 2018

В одну сторону через pd.Series.idxmax и pd.DataFrame.iloc:

df = pd.DataFrame({'Period': [1996,'Jan','Feb','March',1997,'Jan','Feb',
                              'March',1998,'Jan','Feb','March'],
                   'Some-Values': ['','a','b','c','','d','e','f','','g','h','i']})

res = df.iloc[(df['Period'] == 1996).idxmax()+1:(df['Period'] == 1997).idxmax()]

print(res)

  Period Some-Values
1    Jan           a
2    Feb           b
3  March           c

Для удобства чтения можно использовать объект slice:

slicer = slice((df['Period'] == 1996).idxmax()+1,
               (df['Period'] == 1997).idxmax())

res = df.iloc[slicer]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...