如何在 Python 中使用 Pandas 按列分组

Posted

技术标签:

【中文标题】如何在 Python 中使用 Pandas 按列分组【英文标题】:How to group by a column with Pandas in Python 【发布时间】:2021-12-16 08:17:08 【问题描述】:

提前感谢您的反馈!我正在处理时间序列数据,它有 2 列索引转换为 DateTime 对象。我正在处理的内容如下所示:

我正在尝试解析每个商店的销售记录,以便我可以自定义每个商店的销售预测。有什么建议吗?

非常感谢!

【问题讨论】:

你试过搜索功能了吗? 你想做什么?只是按商店过滤掉? 最后,我想对所有商店进行销售预测。大约有 1000 家商店,我使用的销售历史是从 2013 年至今 【参考方案1】:

您可以通过'Store' 列查询/切片数据框,或者执行.groupby('Store').,或者将索引设置为['Store', 'Fiscal_Date']。目前还不清楚你想做什么。也许这有帮助?

import pandas as pd

df = pd.DataFrame('Fiscal_Date':['2013-12-01','2013-12-01','2013-12-02','2013-12-02'],
                    'Store':['A','B','A','B'],
                    'Sale':[12,143,23,21])


df = df.set_index(['Fiscal_Date']).sort_index()


store_tables = 
for store in list(df['Store'].unique()):
    filter_df = df[df['Store'] == store]
    store_tables[store] = filter_df.drop('Store',axis=1)

输出:

要获取特定的Store表,只需以商店名称为键调用即可:

print(store_tables['A'])
             Sale
Fiscal_Date      
2013-12-01     12
2013-12-02     23

或存储“B”:

print(store_tables['B'])
             Sale
Fiscal_Date      
2013-12-01    143
2013-12-02     21

【讨论】:

据我所知,时间序列数据必须使用日期时间和一列进行索引(在这种情况下,该列将是销售)。但是因为我有商店、销售额(2 列),所以我无法预测销售额。那是我想到按每个商店分组以使用 Datetime 索引的单独销售列 啊,是的。那么我的解决方案应该对你有用,因为你可以删除 store 列。只要确保跟踪哪个表是哪个表。事实上,我只是更新了代码,所以你可以这样做【参考方案2】:

df = 数据框的名称

要获取特定商店的销售价值:

df["Sale"].loc[(df["Store"] == "StoreName")]

【讨论】:

这不起作用,因为'SeriesGroupBy'对象没有属性'loc' 您要求按商店销售 我相信这段代码应该是df.loc[(df["Store"] == "StoreName"), "Sale"].loc 方法采用 2 个参数,例如。 df.loc["row identifier", "column identifier"]. @j__carlson 要销售的标识符列在代码 df["Sale"] 的第一部分中 @LukeSimpson,我的立场是正确的。这将按预期运行,但没有必要使用.loc 来屏蔽series

以上是关于如何在 Python 中使用 Pandas 按列分组的主要内容,如果未能解决你的问题,请参考以下文章

Python/Pandas - 按列值删除重复行

python Pandas - 按列对DataFrame排序

Python pandas 按行按列遍历DataFrame

如何在 Pandas 数据框中按列值分组

使用 NaN 在 pandas 中按列对数据进行 Winsorizing

python pandas合并数据 按列合并数据 按行合并数据 超简单