熊猫组合两个系列的独特指数

时间:2017-11-30 22:58:28

标签: python pandas

我有以下两个熊猫系列:

d1 = pd.Series(index=['a','b','c','d'],data=[100,200,300,400])
d1.index.name='letter'
d1.name='value'

d2 = pd.Series(index=[1,2,3], data=[.75,.5,.25])
d2.index.name='number'
d2.name='pct'

print d1
print d2
letter
a    100
b    200
c    300
d    400
Name: value, dtype: int64
number
1    0.75
2    0.50
3    0.25
Name: pct, dtype: float64

我想将两个系列中的每个行组合相乘。得到的序列将是[a,b,c,d]和[1,2,3]的12种组合中的每一种的多指数系列。这些值将是这些组合的乘积。

我可以通过创建一个带有多索引的数据框然后加入两个系列中的每一个来实现这一点。有什么更好的方法呢?

d3 = pd.DataFrame(index=pd.MultiIndex.from_product([d1.index, d2.index],names=['letter','number'])).join(d1).join(d2)
print d3.value*d3.pct
letter  number
a       1          75.0
        2          50.0
        3          25.0
b       1         150.0
        2         100.0
        3          50.0
c       1         225.0
        2         150.0
        3          75.0
d       1         300.0
        2         200.0
        3         100.0
dtype: float64

2 个答案:

答案 0 :(得分:2)

In [103]: pd.Series(np.outer(d1, d2).ravel(),
     ...:           pd.MultiIndex.from_product((d1.index, d2.index)))
     ...:
Out[103]:
a  1     75.0
   2     50.0
   3     25.0
b  1    150.0
   2    100.0
   3     50.0
c  1    225.0
   2    150.0
   3     75.0
d  1    300.0
   2    200.0
   3    100.0
dtype: float64

答案 1 :(得分:1)

或者我们可以使用stack

pd.DataFrame(data=d1.values[:,None]*d2.values,index=d1.index,columns=d2.index).stack()
Out[1347]: 
letter  number
a       1          75.0
        2          50.0
        3          25.0
b       1         150.0
        2         100.0
        3          50.0
c       1         225.0
        2         150.0
        3          75.0
d       1         300.0
        2         200.0
        3         100.0
dtype: float64