python - Python for DF 基于 Excel 和 CSV 的不同结果 pandas Groupby
问题描述
为了让我的代码更快,我想从 Excel 输入切换到 CSV 输入数据。首先,我创建了两个完全相同的 df。
demand_data = pd.ExcelFile("Input Data\Historical Demand.xlsx")
FY20 = pd.read_excel(demand_data, 'Data FY20')
FY20b = pd.read_csv("Input Data\Historical Demand FY20.csv")
接下来,我想使用 pandas groupby 按某些列对我的 df 进行分组,并对某些列求和。我使用以下代码:
FY20 = FY20.groupby(['SKU', 'Material', 'Plant'])[["OrderQuantity","DeliveredQuantity"]].sum().reset_index()
FY20b = FY20b.groupby(['SKU', 'Material', 'Plant'])[["OrderQuantity","DeliveredQuantity"]].sum().reset_index()
结果如下: 基于 Excel DF 的结果 基于 CSV DF 的结果
这对我来说没有任何意义,因为这两个数据帧完全相同,但结果却不是。如何从基于 CSV 的数据框中获得相同的 groupby 结果?
解决方案
这可能是因为您在 CSV 中的数字是字符串(例如1,516.0
),您可以从逗号中注意到这一点。您需要删除这些,然后将生成的字符串转换为整数列:
FY20b["OrderQuantity"] = FY20b["OrderQuantity"].apply(lambda x: x.replace(',', ''))
FY20b["OrderQuantity"] = pd.to_numeric(FY20b["OrderQuantity"])
FY20b["DeliveredQuantity"] = FY20b["DeliveredQuantity"].apply(lambda x: x.replace(',', ''))
FY20b["DeliveredQuantity"] = pd.to_numeric(FY20b["DeliveredQuantity"])
然后你可以这样做:
FY20b = FY20b.groupby(['SKU', 'Material', 'Plant'])[["OrderQuantity","DeliveredQuantity"]].sum().reset_index()
推荐阅读
- php - 将 php 变量传递到 Twig - 文档抛出错误
- python - 这个 Ruby 代码在 Python 中的等价物是什么?
- python - 过滤包含元组的列表列表
- javascript - 如何在查找 Javascript 文件时解决命令提示符中的 SQL ECONNREFUSED 错误?
- c - 多子部分加法的流程API
- r - 如何在ggplot方面按值排序数据
- node.js - 不一致 - “用于调用 Google Play Developer API 的项目 ID 尚未在 Google Play Developer Console 中链接。”
- symfony - empty_data 不适用于复合形式,或者实体没有被实例化(ArgumentCountError:函数的参数太少)
- reactjs - react: setstate 的可重用事件处理程序
- javascript - Vue DOM 更新不会在第一次点击中发生,在后续点击中有效