Gibt es eine einfache Möglichkeit, eine Pandas-Serie an eine andere anzuhängen und ihren Index zu aktualisieren? Derzeit habe ich zwei Serien

from numpy.random import randn
from pandas import Series

a = Series(randn(5))
b = Series(randn(5))

Und ich kann b an a von anhängen

a.append(b)

>>> 0   -0.191924
    1    0.577687
    2    0.332826
    3   -0.975678
    4   -1.536626
    0    0.828700
    1    0.636592
    2    0.376864
    3    0.890187
    4    0.226657

Aber gibt es eine intelligentere Möglichkeit, um sicherzustellen, dass ich einen kontinuierlichen Index habe als

a=Series(randn(5))
b=Series(randn(5),index=range(len(a),len(a)+len(b)))
a.append(b)  
4
greole 5 Dez. 2013 im 16:31

3 Antworten

Beste Antwort

Eine Option ist die Verwendung von reset_index:

>>> a.append(b).reset_index(drop=True)
0   -0.370406
1    0.963356
2   -0.147239
3   -0.468802
4    0.057374
5   -1.113767
6    1.255247
7    1.207368
8   -0.460326
9   -0.685425
dtype: float64

Aus Gründen der Gerechtigkeit ist die Roman Pekar -Methode am schnellsten:

>>> timeit('from __main__ import np, pd, a, b; pd.Series(np.concatenate([a,b]))', number = 10000)
0.6133969540821536
>>> timeit('from __main__ import np, pd, a, b; pd.concat([a, b], ignore_index=True)', number = 10000)
1.020389742271714
>>> timeit('from __main__ import np, pd, a, b; a.append(b).reset_index(drop=True)', number = 10000)
2.2282133623128075
4
Community 23 Mai 2017 im 11:59

Sie können concat auch mit ignore_index=True verwenden: (siehe docs)

pd.concat([a, b], ignore_index=True)

Bearbeiten : Meine Tests mit größeren a und b:

a = pd.Series(pd.np.random.randn(100000))
b = pd.Series(pd.np.random.randn(100000))

%timeit pd.Series(np.concatenate([a,b]))
1000 loops, best of 3: 1.05 ms per loop

%timeit pd.concat([a, b], ignore_index=True)
1000 loops, best of 3: 1.07 ms per loop

%timeit a.append(b).reset_index(drop=True)
100 loops, best of 3: 5.11 ms per loop
4
behzad.nouri 8 Nov. 2014 im 19:12

Ich denke, @runnerup Antwort ist der richtige Weg, aber Sie können auch explizit neue Serien erstellen:

>>> pd.Series(np.concatenate([a,b]))
0   -0.200403
1   -0.921215
2   -1.338854
3    1.093929
4   -0.879571
5   -0.810333
6    1.654075
7    0.360978
8   -0.472407
9    0.123393
dtype: float64
3
Roman Pekar 5 Dez. 2013 im 12:47