为什么我在使用pandas的 groupby() 时,结果没有正确显示按产品的总销售额?
我有一个包含三列的DataFrame:product、quantity 和 price。我想创建一个新列,命名为 sales,然后按product列分组,并计算每个产品的总销售额。
下面是我的代码:
import pandas as pd
df = pd.DataFrame({
"product": ["apple", "banana", "apple", "orange", "banana"],
"quantity": [2, 3, 1, 5, 2],
"price": [3, 2, 3, 4, 2]
})
df["sales"] = df["quantity"] * df["price"]
result = df.groupby("product")["sales"]
print(result)
我得到的输出是:
<pandas.core.groupby.generic.SeriesGroupBy object at 0x000001...>
但我期望得到类似如下的结果:
product
apple 9
banana 10
orange 20
Name: sales, dtype: int64
我在网上搜索,发现使用 groupby() 的示例,但我仍然不明白为什么我的代码只打印出一个 SeriesGroupBy 对象,而不是实际的总销售额。
为什么会这样?我应该如何正确按产品计算总销售额?
解决方案
结果是正确的。groupby 会对行进行分组,它并不应用任何默认聚合,就像SQL的 GROUP BY 在分组时不应用聚合一样。应该参考的页面是 实际的groupby文档页,而不是随机的示例。
正确的表达式是:
df.groupby("product").sum()["sales"]
官方的 Pandas用户指南 提供了大量针对各种场景的用法示例。里面有专门关于 Grouping 以及如何处理分组列的指南。
如果你熟悉SQL, Comparison with SQL 页面会展示SQL概念(包括 GROUP BY)是如何映射到Pandas函数的。
站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。