Для каждой группы в кадре данных отбросьте строки, которые датируются строкой, соответствующей некоторым критериям. - PullRequest
0 голосов
/ 07 января 2019

В строках, имеющих одно и то же «имя», как мне удалить все строки, которые датируют строку с отрицательным значением?

Например, в следующем примере он хотел бы отфильтровать строки 2 и 3, так как они датируют строку 1, которая имеет отрицательное значение.

Введите:

    name        date   value
0    a    2019-01-06      1
1    a    2019-01-07     -1
2    a    2019-01-08      1
3    a    2019-01-09     -1
4    b    2019-01-06      1
5    b    2019-01-07      1
6    b    2019-01-08      1
7    b    2019-01-09      1

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

    name        date   value
0    a    2019-01-06      1
1    a    2019-01-07     -1
4    b    2019-01-06      1
5    b    2019-01-07      1
6    b    2019-01-08      1
7    b    2019-01-09      1

Ответы [ 2 ]

0 голосов
/ 07 января 2019

Не красиво, но если вы используете groupby на 'name' и просто найдете первые отрицательные значения для использования в качестве индекса:

result = df.groupby('name').apply(
    lambda x: x.iloc[:np.where(x['value'] < 0)[0][0] + 1]
    if np.where(x['value'] < 0)[0].any() else x
)

Выход:

       name        date  value
name x                        
a    0    a  2019-01-06      1
     1    a  2019-01-07     -1
b    4    b  2019-01-06      1
     5    b  2019-01-07      1
     6    b  2019-01-08      1
     7    b  2019-01-09      1

Оператор if есть в сценарии нет отрицательного числа. Если вы хотите удалить мультииндекс, вы можете просто удалить его с помощью result.index = result.index.droplevel('name').

0 голосов
/ 07 января 2019

Используя cumsum с bool, мы переключаемся, чтобы включить первую -1 строку и все строки после первой -1

s=df.value.eq(-1).groupby(df['name']).cumsum()
df[s.eq(0)|s.groupby(df.name).shift().eq(0)]
  name       date  value
0    a 2019-01-06      1
1    a 2019-01-07     -1
4    b 2019-01-06      1
5    b 2019-01-07      1
6    b 2019-01-08      1
7    b 2019-01-09      1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...