我有以下两个熊猫系列:
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
答案 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