2016-08-02 3 views
2

Ich habe zwei Pandas Datenrahmen: ein:Wie "füge" man mehrere Pandas-Datenrahmen mit dem Index als Dataframe-Spalte zusammen?

import pandas as pd 
df1 = pd.read_csv('filename1.csv') 
df1 
    A  B 
0 1  22 
1 2  15 
2 5  99 
3 6  1 
.... 

und zwei

df2 = pd.read_csv('filename1.csv') 
df2 
    A  B 
0 1  6 
1 3  52 
2 4  15 
3 5  62 
...  

Ich mag diesen Datenrahmen in einen einzigen Datenrahmen verschmelzen, mit Spalte A als Index für diesen neuen Datenrahmen.

Die Spalten sind Dateinamen, die Zeilen sind die Werte für 'A'.

Wenn für diesen Index keine Werte existieren, existiert NaN. Die Spaltennamen sollten die Dateinamen aus dem obigen * csv sein.

filename1 filename2 
1 22   6 
2 15   NaN 
3 NaN   52 
4 NaN   15 
5 99   62 
6 1   NaN 

Wie macht man das? Für zwei Dateien könnte man pandas.merge() verwenden, aber was sind Dutzende der ursprünglichen Dataframes?

Antwort

2
files = ['file1', 'file2'] 

def read(f): 
    f = f + '.csv' 
    df = pd.read_csv(f, usecols=['A', 'B']) 
    return df.drop_duplicates(subset=['A']).set_index('A').B 

pd.concat([read(f) for f in files], axis=1, keys=files) 

enter image description here

+0

Ihre Lösung ist viel genauer, ich nicht vorsichtig genug war, als OP Frage lesen ... @piRSquared – MaxU

+0

Dank dafür. Wenn ich dies für mehrere Dateien versuche, erhalte ich einfach mehrere Datenrahmen in einem Datenrahmen, wobei Spalte A und B für jede Datei enthalten sind. Wie kann ich für mehrere Dateien explizit in Spalte A indizieren? – ShanZhengYang

+0

Es gibt einige Dateien, in denen A nicht die erste Spalte ist. Nehmen wir an, ich füge 20 zusammen. Wäre es einfacher, die Dateien einfach vorher vorzuverarbeiten und diese (unnötigen) Dateien zu löschen, so dass A das erste ist? – ShanZhengYang

Verwandte Themen