Удалить строки из набора данных - PullRequest
1 голос
/ 11 июня 2019

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

   Attribute:Value  Support
0            VDM:1        9
1            VDM:2        2
2            VDM:3        0
3            VDM:4        0
4            VDM:5        1
5            MDM:1        2
6            MDM:2        6
7            MDM:3        0
8            MDM:4        3
9            MDM:5        1
10            OM:1        2
11            OM:2        6
12            OM:3        0
13            OM:4        3
14            OM:5        1

Здесь я хочу удалить те строки, в которых поддержка меньше или равна 4, а значение атрибута: значение пары равно 1, 2 или 3.После удаления строк набор данных будет выглядеть следующим образом:

   Attribute:Value  Support
0            VDM:1        9
1            VDM:4        0
2            VDM:5        1
3            MDM:2        6
4            MDM:4        3
5            MDM:5        1
6             OM:2        6
7             OM:4        3
8             OM:5        1

Часть значения будет содержать только 1,2,3,4,5.

Ответы [ 3 ]

2 голосов
/ 11 июня 2019

Используйте boolean indexing для удаления строк - но условия необходимо инвертировать - поэтому вместо & для AND используется | для ИЛИ, для первой маски используется ~ для инвертированной маскии для второго условия используется Series.gt > для инвертирования <=:

Также для значений после : используется Series.str.split или Series.str.extract:

mask = ~df['Attribute:Value'].str.split(':').str[1].isin(['1','2','3']) | df['Support'].gt(4)

Потому что:

Часть значения будет содержать только 1,2,3,4,5.

возможно использование:

mask = (df['Attribute:Value'].str.extract(':(\d+)', expand=False).astype(int).gt(3) | 
        df['Support'].gt(4))

df1 = df[mask]
print (df1)

   Attribute:Value  Support
0            VDM:1        9
3            VDM:4        0
4            VDM:5        1
6            MDM:2        6
8            MDM:4        3
9            MDM:5        1
11            OM:2        6
13            OM:4        3
14            OM:5        1
1 голос
/ 11 июня 2019

Вы можете использовать:

df[~(df['Attribute:Value'].str.split(':').str[1].isin(['1','2','3'])&df.Support.le(4))]

   Attribute:Value  Support
0            VDM:1        9
3            VDM:4        0
4            VDM:5        1
6            MDM:2        6
8            MDM:4        3
9            MDM:5        1
11            OM:2        6
13            OM:4        3
14            OM:5        1
1 голос
/ 11 июня 2019

Я думаю, что вы ищете это,

s=(df['Attribute:Value'].str.split(':').str[-1]).astype(int)
df=df[(df['Support']>4)|(s>3)]

O / P:

   Attribute:Value  Support
0            VDM:1        9
3            VDM:4        0
4            VDM:5        1
6            MDM:2        6
8            MDM:4        3
9            MDM:5        1
11            OM:2        6
13            OM:4        3
14            OM:5        1

объяснение:

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