通过取相对于其他系列的相交索引来过滤掉一个系列

Posted

技术标签:

【中文标题】通过取相对于其他系列的相交索引来过滤掉一个系列【英文标题】:Filter out a series by taking the intersecting index with respect to other series 【发布时间】:2016-04-22 21:35:18 【问题描述】:

我有 2 只熊猫 Series(x 和 y),它们有一些共同的时间值

然后我需要通过只取日期索引常见的值来过滤掉其中一个。

让我们说一个系列x

2010-01-27 16:00:00    2.0
2010-01-27 16:10:00    2.2
2010-01-27 16:30:00    1.7

还有一个

2010-01-27 15:50:00    5.0
2010-01-27 16:00:00    2.8
2010-01-27 16:10:00    3.2
2010-01-27 16:20:00    4.2
2010-01-27 16:30:00    1.9

我想通过比较x和y系列各自的索引来过滤y

y 的结果应该类似于

2010-01-27 16:00:00    2.8
2010-01-27 16:10:00    3.2
2010-01-27 16:30:00    1.9

我尝试了一个简单的

y[y.index.get_values()==x.index.get_values()]

但不产生系列输出。 Dataframes 中的Series 是否有类似于merge 的内容?

我不想将Series 合并到一个数据框中,只需比较它们并获取公共数据索引值

【问题讨论】:

【参考方案1】:

您可以使用concatget_duplicates

s = pd.concat([s1, s2], axis=0).sort_index()
print s

2010-01-27 15:50:00    5.0
2010-01-27 16:00:00    2.0
2010-01-27 16:00:00    2.8
2010-01-27 16:10:00    2.2
2010-01-27 16:10:00    3.2
2010-01-27 16:20:00    4.2
2010-01-27 16:30:00    1.7
2010-01-27 16:30:00    1.9

print s2[s.index.get_duplicates()]

2010-01-27 16:00:00    2.8
2010-01-27 16:10:00    3.2
2010-01-27 16:30:00    1.9
Name: 1, dtype: float64

或者使用duplicated:

print s2[s.index[s.index.duplicated()]]

2010-01-27 16:00:00    2.8
2010-01-27 16:10:00    3.2
2010-01-27 16:30:00    1.9
Name: 1, dtype: float64

但最好的是reindexreindex_like

print s2.reindex(s1.index)

2010-01-27 16:00:00    2.8
2010-01-27 16:10:00    3.2
2010-01-27 16:30:00    1.9
Name: 1, dtype: float64

print s2.reindex_like(s1)

2010-01-27 16:00:00    2.8
2010-01-27 16:10:00    3.2
2010-01-27 16:30:00    1.9
Name: 1, dtype: float64

【讨论】:

抱歉,我检查了您的旧问题,但没有答案是 accepted。也许您可以检查tour,如果它们有效,请接受它们。谢谢。

以上是关于通过取相对于其他系列的相交索引来过滤掉一个系列的主要内容,如果未能解决你的问题,请参考以下文章

应该针对不同的排序和过滤条件创建哪些MongoDB索引来提高性能?

循环在图表控件中创建多个系列

我如何使用视图和索引来提高性能

「推荐收藏!」MySQL技术之旅总结和盘点优化方案系列之常用SQL的优化

wordpress 是不是通过自动索引来优化其数据库表?

falcor:使用路径中的索引来设置项目值