python - functions - pandas table




Elimina tutte le righe duplicate in Python Pandas (4)

In realtà, le righe di rilascio 0 e 1 richiedono solo (vengono mantenute tutte le osservazioni contenenti A e C corrispondenti):

In [335]:

df['AC']=df.A+df.C
In [336]:

print df.drop_duplicates('C', take_last=True) #this dataset is a special case, in general, one may need to first drop_duplicates by 'c' and then by 'a'.
     A  B  C    AC
2  foo  1  B  fooB
3  bar  1  A  barA

[2 rows x 4 columns]

Ma sospetto che quello che vuoi veramente sia questo (viene mantenuta un'osservazione contenente A e C abbinati):

In [337]:

print df.drop_duplicates('AC')
     A  B  C    AC
0  foo  0  A  fooA
2  foo  1  B  fooB
3  bar  1  A  barA

[3 rows x 4 columns]

Modificare:

Ora è molto più chiaro, quindi:

In [352]:
DG=df.groupby(['A', 'C'])   
print pd.concat([DG.get_group(item) for item, value in DG.groups.items() if len(value)==1])
     A  B  C
2  foo  1  B
3  bar  1  A

[2 rows x 3 columns]

La funzione drop_duplicates pandas è ottima per "unificare" un dataframe. Tuttavia, uno degli argomenti della parola chiave da passare è take_last=True o take_last=False , mentre vorrei eliminare tutte le righe che sono duplicate in un sottoinsieme di colonne. È possibile?

    A   B   C
0   foo 0   A
1   foo 1   A
2   foo 1   B
3   bar 1   A

Ad esempio, vorrei eliminare le righe che corrispondono alle colonne A e C modo che questo dovrebbe eliminare le righe 0 e 1.


Questo è molto più semplice nei panda ora con drop_duplicates e il parametro keep.

import pandas as pd
df = pd.DataFrame({"A":["foo", "foo", "foo", "bar"], "B":[0,1,1,1], "C":["A","A","B","A"]})
df.drop_duplicates(subset=['A', 'C'], keep=False)

Voglio solo aggiungere la risposta di Ben su drop_duplicates :

keep : {'first', 'last', False}, default 'first'

  • prima: rilascia i duplicati tranne la prima occorrenza.

  • ultimo: rilascia i duplicati eccetto per l'ultima occorrenza.

  • Falso: elimina tutti i duplicati.

Quindi imposta keep a False ti diamo la risposta desiderata.

DataFrame.drop_duplicates (* args, ** kwargs) Restituisce DataFrame con le righe duplicate rimosse, facoltativamente considerando solo determinate colonne

Parametri: sottoinsieme: etichetta colonna o sequenza di etichette, opzionale Considera solo alcune colonne per l'identificazione di duplicati, per impostazione predefinita usa tutte le colonne keep: {'first', 'last', False}, default 'first' first: rilascia i duplicati eccetto per la prima volta. ultimo: rilascia i duplicati eccetto per l'ultima occorrenza. Falso: elimina tutti i duplicati. take_last: deprecato inplace: boolean, default False Se rilasciano duplicati o restituisce una copia cols: kwargs solo argomento di sottoinsieme [deprecato] Restituisce: deduplicato: DataFrame


usa groupby e filter

import pandas as pd
df = pd.DataFrame({"A":["foo", "foo", "foo", "bar"], "B":[0,1,1,1], "C":["A","A","B","A"]})
df.groupby(["A", "C"]).filter(lambda df:df.shape[0] == 1)




duplicates