【问题标题】:Cartesian product from two Series, different lengths and indexes来自两个系列、不同长度和索引的笛卡尔积
【发布时间】:2018-12-26 08:42:31
【问题描述】:

给定两个系列:

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,)

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

【问题讨论】:

    标签: python arrays pandas numpy dataframe


    【解决方案1】:

    我认为两个Series的外积需要numpy.outer

    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
    

    【讨论】:

      【解决方案2】:

      您可以使用 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
      

      【讨论】:

        猜你喜欢
        • 2015-05-06
        • 2012-01-03
        • 2019-08-26
        • 1970-01-01
        • 2014-08-15
        • 1970-01-01
        • 2018-09-28
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多