python - 将两个数据帧乘以矩阵,保留列和索引标题
问题描述
我有两个数据框,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')
解决方案
问题似乎来自这样一个事实,即 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.
如果您不想处理多层索引,您可以随时重置索引。
推荐阅读
- ansible - 使用ansible从用户那里读取密码
- excel - 如何在 VBA 中使用“长”型颜色
- javascript - 减少高度材料文本字段
- mysql - 将我们的 Google App Engine Python API 连接到 Digital Ocean 上的外部 MySQL 数据库
- python-3.x - IndexError: list index out of range: When try to display digits into English words
- javascript - 我怎么知道我在哪个组件中
- audiokit - 如何在使用振荡器时消除滑行效应?
- java - javax.net.ssl.SSLPeerUnverifiedException:将 Spring Boot 从 2.1.0 升级到 2.2.0.M3 后未通过身份验证
- html - 引导表单:自定义文件按钮工作但不显示上传文件的名称
- java - 在容器化 web 应用程序时,它卡在复制 war 文件