有没有一种简单的方法可以将熊猫系列添加到另一个并更新其索引?目前我有两个系列
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)
答案 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)
修改:我的测试包含更大的a
和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
答案 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