2017-04-10 6 views
0

Also versuche ich eine Reihe von Anweisungen für Excel in Python zu reproduzieren. Das Problem ist, ich weiß sehr wenig über Excel und was passiert.Wie entferne ich doppelte Werte aus einer Panda-Pivot-Tabelle?

Ich habe einen Datenrahmen:

no. name corrected no. corrected name 
001 alpha 001    alpha 
002 beta 002    beta 
002 beta2 002    beta 
003 gamma 003    gamma 
004 delta 104    delta 
003 omega 003    gamma 
... ...  ...    ... 

in Excel in den Anweisungen eine Pivot-Tabelle mit all diesen Spalten in dem 'ROWS' Abschnitt zu erstellen.

Ich habe dies sowohl mit 'groupby' gemacht und 'pivot_table' in Pandas

df.groupby(['no.', 'name', 'corrected name'])[['corrected no.']].mean() 
or 
pd.pivot_table(df[['no.', 'name', 'corrected name', 'corrected no.']], index=['no.', 'name']) 

, die wie folgt aussieht: mit

no. name corrected no. corrected name 
001 alpha 001    alpha 
002 beta 002    beta 
     beta2 002    beta 
003 gamma 003    gamma 
     omega 003    gamma 
004 delta 104    delta 

jetzt möchte ich entfernen Sie alle zusätzlichen Zeilen aus den Gruppen mehr als ein Name. z.B. In diesem Fall möchte ich die 'beta2' & 'Omega' Reihen entfernen;

etwas wie folgt aus:

no. name corrected no. corrected name 
001 alpha 001    alpha 
002 beta 002    beta 
003 gamma 003    gamma 
004 delta 104    delta 

So gibt es nur einen 'Name' pro 'Nein.' Das Problem ist, sobald ich die "Pivot-Tabelle" bekomme, gibt es eine Tabelle, die nicht manipuliert werden kann und ist nur 1 Spalte.

Antwort

1

Arbeiten oder so, aber mit dem groupby Ergebnis:

df = pd.read_clipboard(sep='\s{2,}') # sample rows 

s = df.groupby(['no.', 'name', 'corrected name'])[['corrected no.']].mean() 

s 
Out[27]: 
          corrected no. 
no. name corrected name    
1 alpha alpha      1 
2 beta beta      2 
    beta2 beta      2 
3 gamma gamma      3 
    omega gamma      3 
4 delta delta      104 

s.groupby(level=['no.', 'corrected name']).first() 
Out[28]: 
        corrected no. 
no. corrected name    
1 alpha      1 
2 beta      2 
3 gamma      3 
4 delta      104 
+0

Dank. Ich habe'.first() 'benutzt, aber in der ersten Zeile konnte ich das tun, indem ich die Spalten als solche ändere: df.groupby ([' no. ',' Corrected name ',' corrected no. ']) [[ 'Name zuerst() – Nadeem

Verwandte Themen