添加具有相同索引的pandas系列的简单方法

时间:2013-12-05 12:31:56

标签: python pandas

有没有一种简单的方法可以将熊猫系列添加到另一个并更新其索引?目前我有两个系列

from numpy.random import randn
from pandas import Series

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

我可以通过

b追加到a
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

但有一种更聪明的方法可以确保我的连续索引比

a=Series(randn(5))
b=Series(randn(5),index=range(len(a),len(a)+len(b)))
a.append(b)  

3 个答案:

答案 0 :(得分:4)

一种选择是使用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

为了公正起见,Roman Pekar方法最快:

>>> 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

答案 1 :(得分:4)

您还可以concat使用ignore_index=True :(参见docs

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

修改:我的测试包含更大的ab

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

答案 2 :(得分:3)

我认为@runnerup的答案是要走的路,但你也可以明确地创建新系列:

>>> 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