如何播放不同指数的熊猫系列?

时间:2016-04-08 00:52:13

标签: python pandas

我有两个熊猫系列,每个系列都有不同的索引:

In [2]: a = pd.Series(range(5), index=pd.Index(list('abcde'), name='index'))
In [3]: b = pd.Series(range(4), index=pd.Index(list('ABCD'), name='BIG_INDEX'))

我想做的是a.mul(b, axis=1)沿着In [4]: a.apply(lambda x: x*b) Out[4]: BIG_INDEX A B C D index a 0 0 0 0 b 0 1 2 3 c 0 2 4 6 d 0 3 6 9 e 0 4 8 12 的方向指示大熊猫在执行ufunc之前沿1轴广播b(例如,乘以,升高等等)。有没有比使用apply更好的方法?

{{1}}

1 个答案:

答案 0 :(得分:4)

您可以使用numpy.outer执行计算,就像ab是数组一样:

In [285]: pd.DataFrame(np.outer(a, b), columns=b.index, index=a.index)
Out[285]: 
BIG_INDEX  A  B  C   D
index                 
a          0  0  0   0
b          0  1  2   3
c          0  2  4   6
d          0  3  6   9
e          0  4  8  12

这比调用a.apply(lambda x: x*b)更快。

顺便说一句,所有NumPy ufunc come with 5 methodsouteraccumulatereducereduceatat。所以编写上述解决方案的另一种方法是

In [34]: pd.DataFrame(np.multiply.outer(a, b), columns=b.index, index=a.index)
Out[36]: 
BIG_INDEX  A  B  C   D
index                 
a          0  0  0   0
b          0  1  2   3
c          0  2  4   6
d          0  3  6   9
e          0  4  8  12

当以这种方式编写时,很明显如何将相同的想法应用于任何NumPy ufunc。例如,要在ab之外制作和添加表格,请调用np.add' outer方法:

In [37]: pd.DataFrame(np.add.outer(a, b), columns=b.index, index=a.index)
Out[37]: 
BIG_INDEX  A  B  C  D
index                
a          0  1  2  3
b          1  2  3  4
c          2  3  4  5
d          3  4  5  6
e          4  5  6  7