这是一种独特的加入/组合,但我不知道这是什么,所以请随意用术语来纠正我。
例如,我有一个系列profile
,如下所示:
In [1]: profile = pd.Series(data=[0.8,0.64,0.51,0.5,0.5], index=['google.com','facebook.com','twitter.com', 'instagram.com', 'github.com'])
In [2]: profile
Out[2]:
google.com 0.80
facebook.com 0.64
twitter.com 0.51
instagram.com 0.50
github.com 0.50
dtype: float6
我有一个transaction
系列如下:
In [3]: transaction = pd.Series(data=[1,1,1,1], index=['twitter.com','facebook.com','instagram.com','9gag.com'])
In [4]: transaction
Out[4]:
twitter.com 1
facebook.com 1
instagram.com 1
9gag.com 1
dtype: int64
我想要实现的是系列window
,我在其中比较profile
和transaction
:如果transaction
中的索引也存在于profile
中我们得到了某个索引,它是各自的值。仅在profile
中唯一的其余索引的填充值应为0。
In [5]: window
Out[5]:
google.com 0
facebook.com 1
twitter.com 1
instagram.com 1
github.com 0
dtype: int64
是否有任何现有的内置方法/功能可以做到这一点?
我已经尝试过:
window = transaction[transaction.keys().isin(profile.keys())]
但它只返回transaction
和profile
的交集。
我在combine()
中遇到了此Series
函数,但我不知道在func
参数中应用了什么(isin()
无效)。
答案 0 :(得分:2)
从P.77.0版Pandas开始,您可以重新索引该系列。
>>> transaction.reindex(profile.index).fillna(0)
google.com 0
facebook.com 1
twitter.com 1
instagram.com 1
github.com 0
dtype: float64
它似乎比使用loc
略快,但我还没有在更大的数据框架上对此进行测试。
%timeit transaction.reindex(profile.index).fillna(0)
1000 loops, best of 3: 224 µs per loop
%timeit transaction.loc[profile.index].fillna(0)
1000 loops, best of 3: 329 µs per loop