通过取相对于其他系列的相交索引来过滤掉一个系列
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】:您可以使用concat
和get_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
但最好的是reindex
或reindex_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索引来提高性能?