#python #pandas
#python #pandas
Вопрос:
Я хочу извлечь подмножество строк из моего фрейма данных до того, как значение появится в столбце Y, groupby столбец X.
Например, в этом случае для каждого уникального значения в X я хочу извлечь все строки до появления ‘1’ в Y, и выходные данные должны включать строку, в которой встречается первое ‘1’.
X Y Z
index
0 A 0 56
1 A 0 67
2 A 1 66
3 A 0 83
4 A 1 88
5 B 0 52
6 B 1 66
7 B 1 70
8 C 0 68
9 C 0 72
10 D 1 65
И мой желаемый результат:
X Y Z
index
0 A 0 56
1 A 0 67
2 A 1 66
5 B 0 52
6 B 1 66
8 C 0 68
9 C 0 72
10 D 1 65
Заранее спасибо.
Ответ №1:
Вы можете использовать groupby
и apply
с помощью cumsum()
хитрости x2:
df[df.groupby('X').Y.apply(lambda x: x.cumsum().cumsum()).le(1)]
X Y Z
index
0 A 0 56
1 A 0 67
2 A 1 66
5 B 0 52
6 B 1 66
8 C 0 68
9 C 0 72
10 D 1 65
Ответ №2:
Думайте по-другому idxmax
df[df.index<=df.groupby('X').Y.transform('idxmax')]
Out[110]:
X Y Z
index
0 A 0 56
1 A 0 67
2 A 1 66
5 B 0 52
6 B 1 66
8 C 0 68
10 D 1 65
Комментарии:
1. Отличная идея! Хорошо работает, когда индекс числовой.
2. @coldspeed да, как раз собирался упомянуть об этом, также нужен уникальный индекс,