Удалить строки в кадре данных на основе информации из серии - PullRequest
1 голос
/ 25 января 2020

Я хотел бы удалить все строки в Dataframe, которые имеют номер вхождения = 10 и статус = 1. Пример Dataframe X:

    ID      Status 
0   366804  0   
1   371391  1   
2   383537  1   
3   383538  0   
4   383539  0   

...

Первый I нашел все строки со статусом = 1 с count () = 10
exclude = X [X.Status == 1] .groupby ('ID') ['Status']. value_counts (). loc [lambda x: x == 10] .index

исключить является Series MultiIndex ([(371391, 1), (383537, 1), ... ... Возможно ли удалить строки в информации od на основе Dataframe X для идентификатора из Series?)

1 Ответ

1 голос
/ 26 января 2020

Если ваш оригинальный DataFrame выглядит примерно так:

print(df)
        ID  Status
0   366804       0
1   371391       1
2   383537       1
3   383538       0
4   383539       0
5   371391       1
6   371391       1
7   371391       1
8   371391       1
9   371391       1
10  371391       1
11  371391       1
12  371391       1
13  371391       1

И вы объединяете идентификаторы и статусы, чтобы найти идентификаторы, которые хотите исключить:

df2 = df.groupby(['ID', 'Status']).size().to_frame('size').reset_index()
print(df2)                                                                                
       ID  Status  size
0  366804       0     1
1  371391       1    10
2  383537       1     1
3  383538       0     1
4  383539       0     1

excludes = df2.loc[(df2['size'] == 10) & (df2['Status'] == 1), 'ID']
print(excludes)                                                                           
1    371391
Name: ID, dtype: int64

Тогда вы можете использовать Series.isin и инвертирование логического ряда ~s:

df = df[~df['ID'].isin(excludes)]

print(df)                                                                                 
       ID  Status
0  366804       0
2  383537       1
3  383538       0
4  383539       0
...