2016-08-03 19 views
4

ich einen Datenrahmen haben, die (mit vielen zusätzlichen Spalten) wie folgt aussiehtPython/Pandas Iterieren durch Spalten

  age1  age2  age3  age 4 \ 
Id#  
1001   5  6   2   8 
1002   7  6   1   0 
1003  10  9   7   5 
1004   9  12   5   9 

Ich versuche, eine Schleife schreiben, die jede Spalte mit den vorherigen, bevor sie summiert und gibt sie an ein neuer DataFrame. Ich habe angefangen, einfach, mit diesem:

New = pd.DataFrame() 
New[0] = SFH2.ix[:,0] 
for x in SFH2: 
    ls = [x,x+1] 
    B = SFH2[ls].sum(axis=1) 
    New[x] = B 

print(New) 

und die Fehler, die ich bekommen ist

ls = [x,x+1] 

TypeError: Can't convert 'int' object to str implicitly 

Ich weiß, dass int und str sind verschiedene Objekte, aber wie kann ich überwinden diese, oder ist gibt es eine andere Möglichkeit, Spalten zu durchlaufen? Danke!

+0

Können Sie klären genau das, was die Ausgabe sein soll? –

+0

Mit anderen Worten, möchten Sie, dass jede Spalte die Summe aller Spalten auf der linken Seite ist oder einfach diese Spalte und eine einzelne Spalte auf der linken Seite (rechts?). –

+0

Ich möchte jede Spalte die Summe aller Spalten auf der linken Seite sein. – cmf05

Antwort

2

Es klingt wie cumsum ist das, was Sie suchen,:

In [5]: df 
Out[5]: 
     age1 age2 age3 age4 
Id#       
1001  5  6  2  8 
1002  7  6  1  0 
1003 10  9  7  5 
1004  9 12  5  9 

In [6]: df.cumsum(axis=1) 
Out[6]: 
     age1 age2 age3 age4 
Id#       
1001  5 11 13 21 
1002  7 13 14 14 
1003 10 19 26 31 
1004  9 21 26 35 
+0

Ich hatte nicht daran gedacht. Ich las OP und ja. +1 – piRSquared

+0

Ah danke! Natürlich muss ich mich mit Pandas vertraut machen. – cmf05

+0

@piRSquared Nun, OP war ein bisschen mehrdeutig. Der Code schien die rollende Summe mit einem Fenster von 2 zu implizieren, aber die Beschreibung der gewünschten Ausgabe beinhaltete 'cumsum' –

2

Sie können add mit shift ed DataFrame verwenden:

print (df.shift(-1,axis=1)) 
     age1 age2 age3 age4 
Id#       
1001 6.0 2.0 8.0 NaN 
1002 6.0 1.0 0.0 NaN 
1003 9.0 7.0 5.0 NaN 
1004 12.0 5.0 9.0 NaN 

print (df.add(df.shift(-1,axis=1), fill_value=0)) 
     age1 age2 age3 age4 
Id#       
1001 11.0 8.0 10.0 8.0 
1002 13.0 7.0 1.0 0.0 
1003 19.0 16.0 12.0 5.0 
1004 21.0 17.0 14.0 9.0 

Wenn mit 1 verschieben muss (Standardparameter, omited):

print (df.shift(axis=1)) 
     age1 age2 age3 age4 
Id#       
1001 NaN 5.0 6.0 2.0 
1002 NaN 7.0 6.0 1.0 
1003 NaN 10.0 9.0 7.0 
1004 NaN 9.0 12.0 5.0 

print (df.add(df.shift(axis=1), fill_value=0)) 
     age1 age2 age3 age4 
Id#       
1001 5.0 11.0 8.0 10.0 
1002 7.0 13.0 7.0 1.0 
1003 10.0 19.0 16.0 12.0 
1004 9.0 21.0 17.0 14.0