2016-02-20 11 views
8

Ich habe ein Problem, wo ich einen Pandas-Datenrahmen durch Verketten entlang der Zeilenachse (vertikal stapeln) produzieren.Pandas Index nach einer Verkettung neu berechnen

Jeder der konstituierenden Datenrahmen hat einen automatisch generierten Index (aufsteigende Zahlen).

Nach der Verkettung ist mein Index vermasselt: es zählt bis n (wobei n die Form [0] des entsprechenden Datenrahmens ist), und startet beim nächsten Datenrahmen bei Null neu.

Ich versuche, "den Index neu zu berechnen, gegeben die aktuelle Reihenfolge" oder "neu indizieren" (oder so dachte ich). Stellt sich heraus, dass DataFrame.reindex nicht genau das zu tun scheint.


Hier ist, was ich zu tun versucht: „kann nicht von einer doppelten Achse indizieren“

train_df = pd.concat(train_class_df_list) 
train_df = train_df.reindex(index=[i for i in range(train_df.shape[0])]) 

Er scheiterte mit Ich möchte die Reihenfolge meiner Daten nicht ändern ... muss nur den alten Index löschen und einen neuen erstellen, wobei die Reihenfolge der Zeilen beibehalten wird.

Antwort

12

Nach vertikaler Verkettung, wenn Sie einen Index von [0, n erhalten) gefolgt von [0, m), alles, was Sie tun müssen, ist Aufruf reset_index:

train_df.reset_index(drop=True) 

(Sie können tun Sie dies an Ort und Stelle mit inplace=True).


import pandas as pd 

>>> pd.concat([ 
    pd.DataFrame({'a': [1, 2]}), 
    pd.DataFrame({'a': [1, 2]})]).reset_index(drop=True) 
    a 
0 1 
1 2 
2 1 
3 2 
1

sollte diese Arbeit:

train_df.reset_index(inplace=True, drop=True) 

drop zu True Stellen eine zusätzliche Spalte in dem Datenrahmen zu vermeiden.

13

Wenn Ihr Index automatisch generiert wird, und Sie wollen es nicht zu halten, können Sie die ignore_index Option verwenden. `

train_df = pd.concat(train_class_df_list, ignore_index=True) 

Dies wird einen neuen Index für Sie automatisch generieren, und meine Vermutung ist, dass dies genau das ist, was Sie sind.

+1

Dies ist direkter als '.reset_index (drop = True)' und somit IMO vorzuziehen, aber die Benennung ist etwas weniger klar – Dmitri

Verwandte Themen