Панды удаляют первые n строк, пока не будет выполнено условие для столбцов - PullRequest
0 голосов
/ 20 октября 2018

Я пытаюсь удалить несколько строк из моего кадра данных.На самом деле я хочу удалить первые n строки, в то время как n должно быть номером строки определенного условия.Я хочу, чтобы датафрейм начинался со строки, содержащей x-y values xEnd,yEnd.Все более ранние строки должны быть удалены из кадра данных.Почему-то я не понимаю решение.Это то, что у меня есть.

Пример:

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

Я хочу, чтобы мой код уменьшил размер кадра данных с

{'x':[1,1,1,2,2,2], 'y':[1,2,3,3,4,3], 'id':[0,1,2,3,4,5]}

до

{'x':[2,2,2], 'y':[3,4,3], 'id':[3,4,5]}

Ответы [ 2 ]

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

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

df[((df['x'] == xEnd) & (df['y'] == yEnd)).cummax()]
Out[147]: 
   id  x  y
3   3  2  3
4   4  2  4
5   5  2  3
0 голосов
/ 20 октября 2018
  • Используйте & вместо and
  • Используйте loc вместо iloc.Вы можете использовать iloc, но он может сломаться в зависимости от индекса
  • Используйте idxmax, чтобы найти первое положение

#             I used idxmax to find the index |
#                                             v
df.loc[((df['x'] == xEnd) & (df['y'] == yEnd)).idxmax():]
# ^
# | finding the index goes with using loc

   id  x  y
3   3  2  3
4   4  2  4
5   5  2  3

Вотiloc вариант

#    I used values.argmax to find the position |
#                                              v
df.iloc[((df['x'] == xEnd) & (df['y'] == yEnd)).values.argmax():]
# ^
# | finding the position goes with using iloc

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