2016-04-13 6 views
0

Ich habe eine Pivot-Tabelle table1 genannt, die wie folgt aussieht:Pandas- Set Element der Pivot-Tabelle Variable

     Volume 
Site TripDate     
003l 1990-06-10 2354.043820 
    1991-07-26 2745.673779 
    1993-10-08 22789.790846 
    1994-11-20 23072.306665 
    1995-04-24 25203.740194 
    1996-02-13 16505.985301 
    1996-04-15 8257.426317 
    1996-09-12 9148.369265 
    1997-02-13 10014.168593 
    1997-04-20 11154.686365 
    1997-08-23 13064.444117 
    1997-11-06 13704.596573 
    1998-04-15 14358.140459 
    1999-05-04 18100.457859 
    2000-03-17 22910.600843 
    2000-06-01 617.621794 
    2001-10-05 882.738323 
016l 1990-06-10 962.070643 
    1991-07-26 761.409178 
    1993-10-08 475.038362 
    1994-11-20 312.339596 
    1995-04-24 11569.523232 
    1996-02-13 15272.175019 
    1996-04-15 13542.057394 
    1996-09-12 14556.930737 
    1997-02-13 18905.265710 
    1997-04-20 19832.509861 

ich für jeden Standort in Berechnung Prozent Volumen interessiert bin die früheste Volumenberechnung als „theoretischer Wert mit "um die Daten zu normalisieren. Gibt es für jede Site eine Möglichkeit, eine Variable für die früheste Volumenberechnung (d. H. 1990-06-10) direkt aus der Pivot-Tabelle zu definieren?

%Volume=(V_survey-V_1990)/(V_1990) 

Ich habe das Niveau einen Index der Teilmenge müde basiert auf der Verwendung:

für% Volumen Ein Beispiel Formel würde

test = table1[table1[['TripDate']]==1990-06-10] 

aber wirft es den folgenden Fehler:

KeyError: "['TripDate'] not in index" 

Wenn ich die Namen der Indizes mit list(table1.index.names) überprüfe, gibt es zurück:

['Site', 'TripDate'] 

Antwort

0

Ich habe eine Antwort auf mein Problem gefunden, obwohl ich sicher bin, dass es eine viel elegantere Lösung gibt.

meine Lösung Bei der Entwicklung habe ich eine Pivot-Tabelle mit dem frühestmöglichen Termin mit:

query2 = query1[query1.TripDate=='1990-06-10'] 

wo query1 eine Teilmenge von meiner ursprünglichen Datendatei ist.

Ich habe dann ein piviot Tisch eine Art und Weise ähnlich wie table1 und table2 mit:

table3 = pd.pivot_table(query2,values=['Volume'], index=['Site','TripDate'], aggfunc=np.sum) 
table3 = table3.rename(columns = {'Volume':'Early_Vol'}) 

dann kann ich table1 und table3` verschmelzen mit:

merge = pd.merge(table1.reset_index(),table3.reset_index(),on=['Site'],how='left') 

Und nach einer kleinen Formatierung I links mit meiner gewünschten Ausgabe:

Site TripDate  Volume Early_Vol 
0 003l 1990-06-10 2354.043820 2354.043820 
1 003l 1991-07-26 2745.673779 2354.043820 
2 003l 1993-10-08 22789.790846 2354.043820 
3 003l 1994-11-20 23072.306665 2354.043820 
4 003l 1995-04-24 25203.740194 2354.043820 
5 003l 1996-02-13 16505.985301 2354.043820 
6 003l 1996-04-15 8257.426317 2354.043820 
7 003l 1996-09-12 9148.369265 2354.043820 
8 003l 1997-02-13 10014.168593 2354.043820 
9 003l 1997-04-20 11154.686365 2354.043820 
10 003l 1997-08-23 13064.444117 2354.043820 
11 003l 1997-11-06 13704.596573 2354.043820 
12 003l 1998-04-15 14358.140459 2354.043820 
13 003l 1999-05-04 18100.457859 2354.043820 
14 003l 2000-03-17 22910.600843 2354.043820 
15 003l 2000-06-01 617.621794 2354.043820 
16 003l 2001-10-05 882.738323 2354.043820 
17 016l 1990-06-10 962.070643 962.070643 
18 016l 1991-07-26 761.409178 962.070643 
19 016l 1993-10-08 475.038362 962.070643 
20 016l 1994-11-20 312.339596 962.070643 
21 016l 1995-04-24 11569.523232 962.070643 
22 016l 1996-02-13 15272.175019 962.070643 
23 016l 1996-04-15 13542.057394 962.070643 
24 016l 1996-09-12 14556.930737 962.070643 
25 016l 1997-02-13 18905.265710 962.070643 
26 016l 1997-04-20 19832.509861 962.070643 
27 016l 1997-08-23 20914.494534 962.070643