Python 将两个数据帧相乘为矩阵,保留列和索引头
我有两个数据帧,df_binary和df_pim df_二进制是形状(462,38),df_pim是形状(36,34)。它们看起来像这样: df_二进制: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
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”这样的输出,而不是一位数的值。我不太清楚这是为什么。再次感谢你的帮助!