Python 将两个数据帧相乘为矩阵,保留列和索引头

Python 将两个数据帧相乘为矩阵,保留列和索引头,python,pandas,dataframe,Python,Pandas,Dataframe,我有两个数据帧,df_binary和df_pim df_二进制是形状(462,38),df_pim是形状(36,34)。它们看起来像这样: df_二进制: Cust_ID Email Topwater Topwater Topwater ... Plastic Plastic Plastic 12345 i@me.com 1 0 0 1 1 0 ... df_pim: Bait

我有两个数据帧,df_binary和df_pim

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

df_二进制:

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_二进制行和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')

问题似乎来自这样一个事实,即df_二进制文件中的Cust_ID和Email两个额外列导致维度与矩阵乘法不兼容。请尝试以下操作:

df_binary=df_binary.set_索引(['Cust_id','Email'])
df_technology=df_binary.dot(df_pim.values)
df_techique.columns=df_pim.columns
#如果要在点积乘法后删除分层标记:

df_technology.reset_index()#或设置为您需要的任何索引。
Great-这并没有给我一个错误,这是一个开始,但它为“0000100110000”行中的每个值输出字符串,而不是一个整数。知道为什么吗?抱歉,np.dot()将输出一个数组。一旦将df_binary格式化为正确的形状,df_binary.dot(df_pim.values)应该会提供您需要的内容。我将根据我之前实际重置的维度大小添加我的答案(因此我使用.iloc操作符),这不是问题。我只需要输出不是1和0的长字符串的形式s@Sam金:是的,我明白,你想保持df的完整性。看我修改过的答案。希望helps我已经实现了使用我的数据的代码,但是我仍然得到像“001110000”这样的输出,而不是一位数的值。我不太清楚这是为什么。再次感谢你的帮助!