Прикрепить соседний ряд к выбранным строкам в Pandas - PullRequest
0 голосов
/ 10 октября 2018

Из каждого уникального df.Rate.unique() я хочу выбрать df.ID = A12 плюс строку ниже.

Вот мой df.

d = {'ID':['A13', 'A13', 'A12', 'A12','A14', 'A14','A11', 'A12', 'A16', 'A17', 'A12', 'A12'], 
         'A':[1.1,1.4,1.2, 1.6, 1.1, 1.8,1.1, 1.0, 1.9, 2.2, 3.2, 1.4],
         'B':[2.4,2.3,2.7, 1.8, 7.5, 3.5,2.7, 2.3, 2.5, 5.4, 1.4, 9.4],
         'Rate':[0.215333,0.215333,0.215333,0.215333,0.822504,0.822504,0.822504,0.822504,1.538575,1.538575,1.538575,1.538575]}
df = pd.DataFrame(data=d)


df1 = df[df.ID.str.contains('A12')==True] 

Но я хочу, чтобы последняя строка предыдущего идентификатора была включена в df1.

Желаемый выход

    A   B   ID
0   1.4 2.3 A13
1   1.2 2.7 A12
2   1.6 1.8 A12
3   1.1 2.7 A11
4   1.0 2.3 A12
5   2.2 5.4 A17
6   3.2 1.4 A12
7   1.4 9.4 A12

1 Ответ

0 голосов
/ 10 октября 2018

Используйте boolean indexing с groupby с Series с shift, замените пропущенные значения и цепочку с исходной маской побитовым OR (|):

mask = df.ID.str.contains('A12')
df = df[mask.groupby(df['Rate']).shift(-1).fillna(False) | mask]
print (df)
     ID    A    B      Rate
1   A13  1.4  2.3  0.215333
2   A12  1.2  2.7  0.215333
3   A12  1.6  1.8  0.215333
6   A11  1.1  2.7  0.822504
7   A12  1.0  2.3  0.822504
9   A17  2.2  5.4  1.538575
10  A12  3.2  1.4  1.538575
11  A12  1.4  9.4  1.538575
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...