为什么我在使用pandas的 groupby() 时,结果没有正确显示按产品的总销售额?

后端开发 2026-07-09

我有一个包含三列的DataFrame:productquantityprice。我想创建一个新列,命名为 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导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。

相关文章