Панды фильтруют строки по условию, но всегда сохраняют первую строку

Попробуйте это -

$(document).on( 'click', '.click-activity', function () { ... });
3
задан cs95 28 March 2019 в 01:26
поделиться

3 ответа

Вы можете сделать «сохранить первый ряд» частью вашего условия для удаления / сохранения рядов.

Условие для хранения строк будет <ORIGINAL CONDITION> or <CONDITION TO KEEP FIRST ROW>. В коде это

# (condition to drop 3) | (condition to keep 0th row)
df[(df['Column2'] != 3) | (df.index == 0)]

   Column1  Column2 Column3
0        1        3       A
1        2        1       B
3        4        1       D
4        5        1       E

И наоборот, при использовании законов Деморгана условие удаления строк будет (df['Column2'] == 3) & (df.index != 0). Затем мы инвертируем условие, чтобы получить ожидаемый результат:

df[~((df['Column2'] == 3) & (df.index != 0))]

   Column1  Column2 Column3
0        1        3       A
1        2        1       B
3        4        1       D
4        5        1       E

Эти работы предполагают, что ваш индекс равен RangeIndex. Если нет, вместо этого используйте pd.RangeIndex(len(df)) == 0 в качестве второго условия.

0
ответ дан cs95 28 March 2019 в 01:26
поделиться

Я использую duplicated

df[(~df.Column2.duplicated())|df.Column2.ne(3)]
   Column1  Column2 Column3
0        1        3       A
1        2        1       B
3        4        1       D
4        5        1       E
0
ответ дан Wen-Ben 28 March 2019 в 01:26
поделиться

Здесь уже опубликованы отличные ответы, но только для вашего удобства. Мы также можем использовать cumcount для этого, чтобы ранжировать Nth 3 и находим:

df = df[~((df.groupby('Column2').Column2.cumcount() != 0) & (df.Column2 == 3))]

print(df)
   Column1  Column2 Column3
0        1        3       A
1        2        1       B
3        4        1       D
4        5        1       E
0
ответ дан Erfan 28 March 2019 в 01:26
поделиться
Другие вопросы по тегам:

Похожие вопросы: