2017-06-19 4 views
0

sind habe ich einen Datenrahmen ähnlich wie diese:Effizientes laufenden Betrieb auf Pandas Dataframe Spalten, die nicht eindeutig

import numpy as np 
raw_data = {'Identifier':['10','10','10','11',11,'12','13']} 
import pandas as pd 
df = pd.DataFrame(raw_data,columns=['Identifier']) 
print df 

Wie Sie die ‚Identifier‘ sehen Spalte nicht eindeutig zuzuordnen sind und die Datenrahmen hat sich viele Zeilen.

Jedesmal, wenn ich eine Berechnung auf der Identifier Spalte zu tun mit:

df['CalculatedColumn'] = df['Identifer'] + apply calculation here 

Als Identifer nicht eindeutig ist, gibt es einen besseren Weg, dies zu tun? Vielleicht speichern Sie die Berechnungen für jede eindeutige Kennung und geben Sie dann die Ergebnisse? Die Berechnung ist ziemlich komplex und addiert mit der Anzahl der Zeilen, dies dauert lange. Aber ich möchte es reduzieren, da die Bezeichner nicht eindeutig sind.

Irgendwelche Gedanken?

+1

Können Sie ein konkretes Beispiel dafür geben, was Sie vorhaben? Ich bin verwirrt. –

Antwort

0

Ich bin mir ziemlich sicher, dass es ein mehr pythonic Weg, aber das funktioniert für mich:

import numpy as np 
import pandas as pd 

raw_data = {'Identifier':['10','10','10','11','11','12','13']} 
df = pd.DataFrame(raw_data,columns=['Identifier']) 
df['CalculatedColumn']=0 

dfuni=df.drop_duplicates(['Identifier']) 
dfuni['CalculatedColumn']=dfuni['Identifier']*2 # perform calculation 

for j in range(len(dfuni)): 
    df['CalculatedColumn'][df['Identifier']==dfuni['Identifier'].iloc[j]]=dfuni['CalculatedColumn'].iloc[j] 

print df 
print dfuni 

Als Erklärung: Ich bin einen neuen Datenrahmen dfuni zu schaffen, die all einzigartigen Felder Ihres Originals enthält Datenrahmen. Dann führen Sie Ihre Berechnung auf diesem (Ich multiplizierte nur den Wert der Identifier mit zwei, und weil es eine Zeichenfolge ist, ist das Ergebnis , 1111 usw.). Bis hier mag ich den Code, aber dann benutze ich eine Schleife durch alle Werte von dfuni, um sie wieder in Ihre ursprüngliche df zu kopieren. Für diesen Punkt könnte es eine elegantere Lösung geben.

Als Ergebnis erhalte ich:

Identifier CalculatedColumn 
0   10    1010 
1   10    1010 
2   10    1010 
3   11    1111 
4   11    1111 
5   12    1212 
6   13    1313 

PS: Dieser Code mit Python getestet 3. Das einzige, was ich die Druck Aussagen angepasst war. Ich habe vielleicht etwas verpasst.

Verwandte Themen