2017-06-08 4 views
0
Title URL Price Address Rental_Type 
0 House URL $600 Auburn Apartment 
1 House URL $600 Auburn Apartment 
2 House URL $900 NY  Apartment 
3 Room! URL $1018 NaN  Office 
4 Room! URL $910 NaN  Office 

Ich versuche, Duplikate unter Title fallen. Aber ich möchte nur Zeilen löschen, die Rental_Type == 'Office' haben. Ich habe auch eine zweite Einschränkung. Ich möchte die Zeilen mit Rental_Type == 'Apartment' löschen, aber ich möchte das erste Duplikat in diesem Szenario behalten. In dieser Situation würden also Zeile 3 und 4 fallen und dann nur Zeile 1 aus Zeile 0/1.Pandas: Duplikate mit einer Einschränkung in einer anderen Spalte

Antwort

0

Ich würde dies in Schritten aufbauen, um eine Liste von Vorfällen zu erstellen, die Sie löschen möchten.

offices = df['Rental_Type'] == 'Office' 
apts = df['Rental_Type'] == 'Apartment' 

dup_offices = df[offices].duplicated('Title', keep=False) 
dup_apts = df[apts].duplicated('Title', keep='first') 

to_drop = pd.Index(dup_apts[dup_apts].index.tolist() + \ 
        dup_offices[dup_offices].index.tolist()) 

df = df.drop(to_drop) 
0

Sie können die Duplikate mit Einschränkungen in dieser Art und Weise fallen:

#drop all duplicate with Rental_Type=='Office' 
    df1 = df[(df.Rental_Type=='Office')].drop_duplicates(['Title'], keep=False) 

    #Capture the duplicate row with Rental_Type=='Apartment' 
    df2 = df[(df.Rental_Type=='Apartment')].duplicated(['Title'], keep = 'last') 
    df3=df[(df.Rental_Type=='Apartment')][df2.values][1:] 

    #Put them together 
    df_final = pd.concat([df1,df3]) 


In [1]: df_final 
Out[1]: 
    Title URL Price Address Rental_Type 
1 House URL 600  Auburn Apartment 
Verwandte Themen