2013-08-05 11 views

Antwort

228

Ich denke, concat ist eine nette Möglichkeit, dies zu tun. Wenn sie vorhanden sind, verwendet er die Namen Attribute der Serie wie die Spalten (sonst ist es einfach Zahlen sie):

In [1]: s1 = pd.Series([1, 2], index=['A', 'B'], name='s1') 

In [2]: s2 = pd.Series([3, 4], index=['A', 'B'], name='s2') 

In [3]: pd.concat([s1, s2], axis=1) 
Out[3]: 
    s1 s2 
A 1 3 
B 2 4 

In [4]: pd.concat([s1, s2], axis=1).reset_index() 
Out[4]: 
    index s1 s2 
0  A 1 3 
1  B 2 4 

Hinweis: Diese erstreckt sich auf mehr als 2 Serie.

+4

das Kopieren tatsächlich vermeidet auch (im Vergleich zur dict Lösung) – Jeff

+0

In einer Instanz scheint es mir zu sagen 'ValueError: Der Wahrheitswert eines Arrays mit mehr als einem Element ist mehrdeutig. Benutze a.any() oder a.all() '- irgendwelche Ideen? – user7289

+0

@ user7289 nicht sicher, wo das herkommen würde, könntest du das als eine andere Frage stellen? –

5

Beispielcode:

a = pd.Series([1,2,3,4], index=[7,2,8,9]) 
b = pd.Series([5,6,7,8], index=[7,2,8,9]) 
data = pd.DataFrame({'a': a,'b':b, 'idx_col':a.index}) 

Pandas können Sie eine DataFrame von einem dict mit Series als die Werte und die Spaltennamen als Schlüssel erstellen. Wenn es einen Series als Wert findet, verwendet es den Series Index als Teil des DataFrame Index. Diese Datenausrichtung ist einer der Hauptvorteile von Pandas. Folglich, wenn Sie andere Bedürfnisse haben, hat der frisch erstellte DataFrame doppelten Wert. Im obigen Beispiel hat data['idx_col'] die gleichen Daten wie data.index.

0

Nicht sicher, ich verstehe Ihre Frage vollständig, aber ist das, was Sie tun möchten?

pd.DataFrame(data=dict(s1=s1, s2=s2), index=s1.index) 

(index=s1.index ist nicht einmal hier notwendig)

26

Pandas den gemeinsamen Index Sie geschehen sein, das gleiche hier automatisch ausrichten in Serie diese weitergegeben und erstellen. reset_index verschiebt den Index in eine Spalte.

In [2]: s1 = Series(randn(5),index=[1,2,4,5,6]) 

In [4]: s2 = Series(randn(5),index=[1,2,4,5,6]) 

In [8]: DataFrame(dict(s1 = s1, s2 = s2)).reset_index() 
Out[8]: 
    index  s1  s2 
0  1 -0.176143 0.128635 
1  2 -1.286470 0.908497 
2  4 -0.995881 0.528050 
3  5 0.402241 0.458870 
4  6 0.380457 0.072251 
12

Warum verwenden Sie einfach .to_frame, wenn beide die gleichen Indizes haben? Diese

a.to_frame().join(b.to_frame()) 

^^ funktioniert nicht, wenn versucht zu 'verbinden' zwei Pandas serieses

+2

Vielleicht wäre das passender: a.to_frame (name = 'a'). Join (b.to_frame (name = 'b')) – user3282777

1

eine Vereinfachung der Lösung auf Basis von join():

df = a.to_frame().join(b)