两个序列的笛卡尔积,长度和索引不同。

6

给定两个序列:

import pandas as pd
ser1 = pd.Series(data = [1,2,3], index=[1,2,3])
ser2 = pd.Series(data = [1,2,3,4,5], index = ['a','b','c','d','e'])

我该如何进行交叉相乘以得到所需的输出?
pd.DataFrame(
data = [[1,2,3],[2,4,6],[3,6,9],[4,8,12],[5,10,15]],
index = ser2.index,
columns = ser1.index,)

到目前为止,我的方法是构建一个临时数据框,其索引和列与两个系列匹配,然后使用iteritems()迭代其中一个系列。我觉得应该有一种更简洁的方法来实现这个。

2个回答

10

我认为需要使用numpy.outer函数来计算两个Series的外积:

df = pd.DataFrame(np.outer(ser2, ser1), index = ser2.index, columns = ser1.index)

print (df)
   1   2   3
a  1   2   3
b  2   4   6
c  3   6   9
d  4   8  12
e  5  10  15

6
你可以使用NumPy广播功能,将一个系列的值乘以另一个系列的转置值。
res = pd.DataFrame(ser1.values * ser2.values[:, None],
                   index=ser2.index, columns=ser1.index)

print(res)

   1   2   3
a  1   2   3
b  2   4   6
c  3   6   9
d  4   8  12
e  5  10  15

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接