use*_*289 51 python series pandas
我在pandas/python中有两个系列s1和s2,并且想要计算交集,即系列的所有值都是常见的.
我如何使用concat函数执行此操作?我一直试图解决它,但一直无法(我不想计算s1和S2的索引上的交集,但是在值上).
提前致谢.
Joo*_*oop 60
将两个系列放在Python的set容器中,然后使用set intersection方法:
s1.intersection(s2)
然后根据需要转换回列表.
刚注意到标签中的熊猫.可以翻译回来:
pd.Series(list(set(s1).intersection(set(s2))))
从评论中我已将其更改为更Pythonic的表达式,该表达式更短且更易于阅读:
Series(list(set(s1) & set(s2)))
除非索引数据对你很重要,否则应该这样做.
list(...)在转到pd之前添加了翻译集.系列因为pandas不接受set作为Series的直接输入.
eld*_*d-a 34
建立:
s1 = pd.Series([4,5,6,20,42])
s2 = pd.Series([1,2,3,5,42])
时序:
%%timeit
pd.Series(list(set(s1).intersection(set(s2))))
10000 loops, best of 3: 57.7 µs per loop
%%timeit
pd.Series(np.intersect1d(s1,s2))
1000 loops, best of 3: 659 µs per loop
%%timeit
pd.Series(np.intersect1d(s1.values,s2.values))
10000 loops, best of 3: 64.7 µs per loop
因此,即使对于小型系列,numpy解决方案也可以与集合解决方案相媲美,如果使用values明确的话.
jbn*_*jbn 13
如果您正在使用Pandas,我假设您也在使用NumPy.Numpy有一个intersect1d适用于Pandas系列的功能.
例:
pd.Series(np.intersect1d(pd.Series([1,2,3,5,42]), pd.Series([4,5,6,20,42])))
将返回值为5和42的Series.
蟒蛇
s1 = pd.Series([4,5,6,20,42])
s2 = pd.Series([1,2,3,5,42])
s1[s1.isin(s2)]
[R
s1  <- c(4,5,6,20,42)
s2 <- c(1,2,3,5,42)
s1[s1 %in% s2]
编辑:不处理欺骗.
pd.merge可以使用:
pd.merge(series1, series2, how='inner').drop_duplicates()
请注意,结果是一个数据框。
| 归档时间: | 
 | 
| 查看次数: | 65736 次 | 
| 最近记录: |