【问题标题】:pandas: grouping over multiple columns [duplicate]熊猫:对多列进行分组[重复]
【发布时间】:2020-08-10 23:46:42
【问题描述】:

我正在学习pandas,有很强的SQL背景,所以我需要重新思考很多习惯和心态。虽然我认为我了解groupby() 方法,但我只是不知道如何将它应用于多个列。

假设我们在数据库中有这张表:

+----+--------------+-----------+--------------+-------+
| id | product_name | category  | subcategory  | price |
+----+--------------+-----------+--------------+-------+
|  1 | product1     | category1 | subcategory1 |  8.41 |
|  2 | product2     | category1 | subcategory1 | 62.74 |
|  3 | product3     | category1 | subcategory2 | 85.84 |
|  4 | product4     | category2 | subcategory2 | 32.71 |
|  5 | product5     | category2 | subcategory1 | 39.62 |
|  6 | product6     | category2 | subcategory1 | 37.43 |
|  7 | product7     | category3 | subcategory2 | 55.01 |
|  8 | product8     | category3 | subcategory1 | 26.91 |
|  9 | product9     | category3 | subcategory3 | 77.13 |
| 10 | product10    | category3 | subcategory3 | 40.79 |
+---+--------------+-----------+--------------+-------+

对多列进行聚合非常容易:

select category, subcategory, avg(price) as avg_price from my_table group by category, subcategory

返回这个:

+-----------+--------------+-----------+
| category  | subcategory  | avg_price |
+-----------+--------------+-----------+
| category1 | subcategory1 |    35.575 |
| category1 | subcategory2 |     85.84 |
| category2 | subcategory1 |    38.525 |
| category2 | subcategory2 |     32.71 |
| category3 | subcategory1 |     26.91 |
| category3 | subcategory2 |     55.01 |
| category3 | subcategory3 |     58.96 |
+-----------+--------------+-----------+

所以,在我明显不正确的理解中,这在 pandas 中也是如此:

df['price'].groupby(df[['category', 'subcategory']]).mean()

返回ValueError: Grouper for '<class 'pandas.core.frame.DataFrame'>' not 1-dimensional,而:

 df['price'].groupby(df['category']).mean()

按预期工作。

有人可以帮我吗?

【问题讨论】:

  • 试试:df.groupby(['category', 'subcategory'])['price'].mean()

标签: python pandas pandas-groupby


【解决方案1】:

我认为你需要做 -

df.groupby(['category', 'subcategory'])['price'].mean()

【讨论】:

  • 谢谢大家,就是这样!
【解决方案2】:

你必须修改你的 groupby 语法

df.groupby(['category', 'subcategory'])['price'].mean()

【讨论】:

    猜你喜欢
    • 2018-10-12
    • 2020-08-02
    • 1970-01-01
    • 2017-12-13
    • 2022-12-12
    • 2021-07-20
    • 1970-01-01
    • 2022-11-30
    • 2016-11-18
    相关资源
    最近更新 更多