如何在 Python 中对相同的值进行分组并计算它们的频率?

数据挖掘 Python 统计数据 熊猫 蟒蛇
2021-10-04 04:53:44

使用 Python 进行分析的新手,所以请保持温和 :-) 我找不到这个问题的答案 - 如果它已经在其他地方以不同的格式得到了回答,我们深表歉意。

我有一个零售店的交易数据集。变量和解释是:

  • section:商店的section,一个str;
  • prod_name:产品名称,一个str;
  • 收据:发票编号,int;
  • 收银员,收银员编号,int;
  • cost:物品的成本,一个浮点数;
  • 日期,格式为 MM/DD/YY,一个 str;
  • 时间,格式为 HH:MM:SS,一个 str;

单次交易中购买的所有产品的收据具有相同的价值,因此可用于确定单次交易中的平均购买次数。

解决此问题的最佳方法是什么?我本质上想用groupby()它自己相同的出现来对收据变量进行分组,以便我可以创建一个直方图。

使用 pandas DataFrame 中的数据。

编辑:

这是一些带有标题的示例数据(prod_name 实际上是一个十六进制数字):

 section,prod_name,receipt,cashier,cost,date,time 
 electronics,b46f23e7,102856,5,70.50,05/20/15,9:08:20 
 womenswear,74558d0d,102857,8,20.00,05/20/15,9:12:46 
 womenswear,031f36b7,102857,8,30.00,05/20/15,9:12:47 
 menswear,1d52cd9d,102858,3,65.00,05/20/15,9:08:20 

从这个样本集中,我期望一个收据的直方图显示两次出现的收据 102857(因为那个人在一次交易中购买了两件物品)和一次分别出现的收据 102856 和收据 102858。注意:我的数据集并不大,大约100 万行。

3个回答

从这个样本集中,我期望收据的直方图显示两次收据 102857(因为该人在一次交易中购买了两件商品)和收据 102856 和收据 102858 分别出现一次。

然后你想要:

df.groupby('receipt').receipt.count()

receipt
102856    1
102857    2
102858    1
Name: receipt, dtype: int64

我正在整理一些关于数据争论的教程。也许我在 github 上的jupyter notebook会有所帮助。我认为关键是修改行:

df.groupby('male')['age'].mean()

成为:

df.groupby('reciept')['prod_name'].count()

要按多个变量分组,这应该有效:

df.groupby(['reciept','date'])['reciept'].count()

据我了解,您需要收据编号的直方图。你可以试试这样的

import pandas as pd
data = np.read_csv("your_file_path.csv")
data.groupby(["receipt"])receipt.count().sort_values(ascending=False).head(20).plot.bar()

这将为您提供最重复计费号码的条形图(20 个最重复) 更改 head 函数中的数字以获得更多或更少。