2017-09-10 8 views
0

Also habe ich eine große Datenmenge auf nfl Statistiken von 2005 - 2016. Problem ist, es wurde eine neue Kategorie im Jahr 2009 hinzugefügt, so dass meine Spalten vor versetzt sind 2009. Ich möchte alle Zeilen, die 'NFL Season' Spalte < in der Saison 2009 nach rechts verschieben, aber nur Spalten 11 bis vorletzte Spalte (so [11: -1]).Pandas - Verschieben bestimmter Spalten bestimmter Zeilen basierend auf einem Spaltenwert

Ich schaffte es auf diese Weise, aber es dauert so lange, über alle diese Zeilen (etwa 10.000) zu iterieren. Gibt es einen schnelleren Weg, dies zu tun? Ich versuchte zu sehen, ob es eine Möglichkeit gab, die .isin zu verwenden, wo ich sagen könnte, ob die Zeile in meinem 'rows_to_shift' ist, aber ich konnte nicht herausfinden, wie das funktionieren würde.

Und wie ich schon sagte, es muss einen besseren oder effizienteren Weg geben, den ich nur nicht kenne, während ich noch Pandas lerne.

Hier ist der Code, den ich verwendet haben:

rows_to_shift = rb_df[rb_df['NFL Season'] < 2009].index.tolist() 

for i in rows_to_shift: 
    rb_df.iloc[[i],11:-1] = rb_df.iloc[[i],11:-1].shift(1,axis=1) 

Antwort

1

Es scheint, Sie brauchen: für nicht an erster Stelle dieses Denkens

rows_to_shift = rb_df[rb_df['NFL Season'] < 2009].index 

rb_df.iloc[rows_to_shift,11:-1] = rb_df.iloc[rows_to_shift,11:-1].shift(1,axis=1) 
+0

yup, das ist genau das! Ich war komplett über das Problem/die Lösung nachdenken. – chitown88

0

Es tut mir leid, ich bin dumm und verschwende deine Zeit. So eine einfache Lösung und ich dachte über das Problem nach. Es gibt keine Notwendigkeit, zu iterieren, rufen Sie nur diese Zeilen:

rb_df.iloc[rb_df[rb_df['NFL Season'] < 2009].index,11:-1] = rb_df.iloc[rb_df[rb_df['NFL Season'] < 2009].index,11:-1].shift(1,axis=1) 
Verwandte Themen