Сохраняйте верхние n строк информационного кадра pandas в зависимости от условия - PullRequest
0 голосов
/ 27 октября 2018

как бы удалить все строки из кадра данных, которые идут после определенного выполненного условия? В качестве примера у меня есть следующий фрейм данных:

import pandas as  pd
xEnd=1
yEnd=2
df = pd.DataFrame({'x':[1,1,1,2,2,2], 'y':[1,2,3,3,4,3], 'id':[0,1,2,3,4,5]})

Как бы получить фрейм данных, который удаляет последние 4 строки и сохраняет верхние 2, как в строке 2, условия x=xEnd и y=yEnd выполнены. РЕДАКТИРОВАНИЕ: должен был упомянуть, что датафрейм не обязательно возрастает. Также может быть по убыванию, и я все еще хотел бы получить верхние.

Ответы [ 3 ]

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

не на 100% уверен, что я правильно понимаю, но вы можете отфильтровать ваш фрейм данных следующим образом:

 df[(df.x <= xEnd) & (df.y <= yEnd)]

это даст фрейм данных:

   id   x   y   
0   0   1   1   
1   1   1   2 

Если x и y не строгоувеличивается, и вы хотите, что выше линии, которые удовлетворяют условию:

 df[df.index <= (df[(df.x == xEnd) & (df.y == yEnd)]).index.tolist()]
0 голосов
/ 27 октября 2018

Чтобы нарезать ваш фрейм данных до при первом выполнении условия в двух рядах, сначала рассчитайте требуемый индекс, а затем нарежьте с помощью iloc.

Вы можете рассчитать индекс с помощью set_index, isin и np.ndarray.argmax:

idx = df.set_index(['x', 'y']).isin((xEnd, yEnd)).values.argmax()
res = df.iloc[:idx+1]

print(res)

   x  y  id
0  1  1   0
1  1  2   1

Если вам нужна лучшая производительность, см. Эффективно вернуть индекс первого значения, удовлетворяющего условию в массиве .

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

df = df.iloc[[0:yEnd-1],[:]]

Выберите только первые две строки, сохраните все столбцы и поместите их в новый фрейм данных. Или вы можете использовать то же имя переменной.

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