代码之家  ›  专栏  ›  技术社区  ›  xiaoshir

pandas数据帧按列相乘,索引匹配

  •  2
  • xiaoshir  · 技术社区  · 8 年前
    df1=pd.DataFrame(np.random.randn(6,3),index=list("ABCDEF"),columns=list("XYZ"))
    df2=pd.DataFrame(np.random.randn(6,1),index=list("ABCDEF"))
    

    我想将df1的每一列与df2相乘,并按索引标签进行匹配。这意味着:

    df1["X"]*df2
    df1["Y"]*df2
    df1["Z"]*df2
    

    输出将具有df1的索引和列。

    我该怎么做?尝试了几种方法,但仍然不起作用。。。

    2 回复  |  直到 8 年前
        1
  •  4
  •   jezrael    8 年前

    使用 mul 功能和多个 DataFrame 通过 Series (列)按位置选择 iloc :

    print(df1.mul(df2.iloc[:,0], axis=0))
              X         Y         Z
    A -0.577748  0.299258 -0.021782
    B -0.952604  0.024046 -0.276979
    C  0.175287  2.507922  0.597935
    D -0.002698  0.043514 -0.012256
    E -1.598639  0.635508  1.532068
    F  0.196783 -0.234017 -0.111166
    

    详细信息:

    print(df2.iloc[:, 0])
    A   -2.875274
    B    1.881634
    C    1.369197
    D    1.358094
    E   -0.024610
    F    0.443865
    Name: 0, dtype: float64
    
        2
  •  0
  •   Ken Syme    8 年前

    您可以使用 apply 将df1中的每列与df2相乘。

    df1.apply(lambda x: x * df2[0], axis=0)
    
              X         Y         Z
    A -0.437749  0.515611 -0.870987
    B  0.105674  1.679020 -0.693983
    C  0.055004  0.118673 -0.028035
    D  0.704775 -1.786515 -0.982376
    E  0.109218 -0.021522 -0.188369
    F  1.491816  0.105558 -1.814437