首页 > 解决方案 > 熊猫中的串联系列丢弃重叠的索引

问题描述

假设我有以下三个具有重叠索引的系列

s1 = pd.Series(data=np.arange(5))
s2 = pd.Series(data=np.arange(5),index=np.arange(2,7))
s3 = pd.Series(data=np.arange(5),index=np.arange(5,10))

我希望将它们连接成一个系列;但是,我希望从具有“最新”索引的系列中获取重叠索引中的数据值。

因此,在玩具案例中,输出将是:

0    0
1    1
2    0
3    1
4    2
5    0
6    1
7    2
8    3
9    4
dtype: int32

这也可以被视为在与下一个系列重叠的点处切割每个系列,然后只是连接。pandas当可能有许多大长度系列时,是否有一种快速有效的方法来做到这一点。

编辑

我正在寻找一种有效的方法来做到这一点,因为实际上系列的长度和数量都很大,分别约为 100k 和 10k。

标签: pandasnumpydataframeseries

解决方案


Ideaconcatenate用于展平索引和值,并使用反转掩码 bySeries过滤:Series.duplicated~

def new1(series):
    b = [x.index for x in series]
    v = np.concatenate(series)
    i = np.concatenate(b)

    mask = ~pd.Series(i).duplicated(keep='last')
    return pd.Series(v[mask], index=i[mask])

推荐阅读