首页 > 解决方案 > 将两个数据帧乘以矩阵,保留列和索引标题

问题描述

我有两个数据框,df_binary 和 df_pim。

df_binary 是形状(462,38),df_pim 是形状(36,34)。它们看起来像这样:

df_binary:

Cust_ID   Email     Topwater  Topwater  Topwater ...  Plastic  Plastic  Plastic
12345     i@me.com  1         0         0             1        1        0
...

df_pim:

Bait Name      Technique 1     Technique 2     Technique 3   ...   Technique 33
Topwater       1               1               1                   0
...
Plastic        1               0               0                   1

我希望输出看起来像这样:

df_技术:

Cust_ID     Email      Technique 1      Technique 2      Technique 3   ...   Technique 33
12345       i@me.com   4                1                2                   1

其中“技术”列是 df_binary 行和 df_pim 列的点积。

已经为此苦苦挣扎了一段时间,以下是我迄今为止所做的三个尝试:

# Try 1
df_pim.iloc[:,1:].mul(df_binary)

# Try 2
df_binary.iloc[:,2:].dot(df_pim.values)

# Try 3
df_binary.iloc[:,2:].multiply(df_pim,axis='index')

标签: pythonpandasdataframe

解决方案


问题似乎来自这样一个事实,即 df_binary 中的 2 个额外列 Cust_ID 和 Email 导致您的维度与矩阵乘法不兼容。尝试以下操作:

df_binary = df_binary.set_index(['Cust_id', 'Email'])
 
df_technique = df_binary.dot(df_pim.values)
  
df_techique.columns = df_pim.columns

# If you want to remove layered indicies after dot product multiplication:
df_technique.reset_index() #or set to whatever index you need.

如果您不想处理多层索引,您可以随时重置索引。


推荐阅读