python - 将 Pandas 数据帧与列名和索引名相乘
问题描述
我有两个从 excel 工作簿导入的 pandas 数据框。将项目名称作为第一列,将月份作为列标题。它们的大小相同,并且具有相同的列标题/行索引名称。我想将这两个数据框相乘,最终在第一列中使用相同的项目名称,在标题中使用相同的月份,但在单元格中使用数组的乘积。
我已经尝试过:df * df1
,,df.values * df1.values
并且df.mul(df1)
每次我得到
TypeError:不能将序列乘以“str”类型的非整数
我的数据的一个简短示例是:
东风:
SKU 2017-01-31 2017-02-28
0 FUJI Film 0.761031 0.838831
df1:
SKU 2017-01-31 2017-02-28
0 FUJI FILM 8557.12 7240.64
我使用以下内容导入了文件:
df = pd.read_excel('C:/desktop/Arrays.xlsx',sheet_name=0)
df1 = pd.read_excel('C:/desktop/Arrays.xlsx',sheet_name=1)
理想情况下,我希望得到一个 df3 ,它是两个数组的乘积,而第一列和标题保持不变。
我很感激任何帮助。
解决方案
您可以使用select_dtypes
排除非数字类型的列,然后我们使用mul
, 和update
, 来获取结果并相应地更新值
df.update(df.select_dtypes(exclude='object').mul(df1.select_dtypes(exclude='object')))
df
Out[891]:
SKU 2017-01-31 2017-02-28
0 FUJIFilm 6512.233591 6073.673292
推荐阅读
- javascript - 为什么我的 ajax 函数被执行了两次?
- excel - 如何在 Excel/VBA 中减小 pdf 文件大小
- routes - Quarkus - Openshift - route.annotations
- entity-framework - 带有 GUIDS 列表的实体框架子句
- grafana - 无法使用 grafana tempo 连接 opentelemetry 收集器
- flutter - 为什么我不能定义内容器的高度?
- python - 使用 return 语句正确退出 while 循环
- node.js - 如何在 Node JS 中读取标准输入以编写从用户输入中添加两个数字的程序
- android - RecyclerView 不会填满剩余空间(ConstraintLayout)
- c# - 想从 2 个按钮打开相同的表单,但每个按钮都可以打开一次