同一の値をグループ化し、Pythonでその頻度を数える方法は?


10

Pythonを使用した分析の初心者なので、穏やかにしてください:-)この質問に対する答えが見つかりませんでした。別の形式ですでに他の場所で回答されている場合は、お詫びします。

小売店のトランザクションデータのデータセットがあります。変数と説明は次のとおりです。

  • section:ストアのセクション、str。
  • prod_name:製品の名前、str;
  • 領収書:請求書の番号、int;
  • レジ係、レジ係の番号、int;
  • コスト:アイテムのコスト、フロート。
  • MM / DD / YY形式の日付、str;
  • 時間、形式HH:MM:SS、str;

領収書は、1回のトランザクションで購入されたすべての製品に対して同じ値を持つため、1回のトランザクションで行われた購入の平均数を決定するために使用できます。

これについて最善の方法は何ですか?基本的groupby()には、ヒストグラムを作成できるように、独自の同一の出現ごとに受信変数をグループ化するために使用したいと思います。

Pandas DataFrameでデータを操作する。

編集:

以下は、ヘッダー付きのサンプルデータです(prod_nameは実際には16進数です)。

 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の2つのオカレンス(1つのトランザクションで2つのアイテムを購入したため)と、領収書102856およびレシート102858のそれぞれ1つのオカレンスを示す領収書のヒストグラムが予想されます。注:データセットは巨大ではありません。 100万行。


完了しました。サンプルデータをいくつか追加しました。
new_analyst

回答:


15

このサンプルセットから、領収書102857と領収書102858のそれぞれ2つのアイテム(1つのトランザクションで2つのアイテムを購入したため)と2つのアイテムの領収書102857を示す領収書のヒストグラムを期待します。

次に、あなたが欲しい:

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

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

結果がデータフレームではなくなったので、これをフィルタリングして、1を超える数の値のみを表示するにはどうすればよいですか?
Nikhil VJ 2018

1
あなたはまだのようなものを行うことができますs[s>1]場合は、s=df.groupby('receipt').receipt.count()
エムレ

2

データラングリングに関するチュートリアルをまとめています。多分githubのjupyterノートブックが役立つでしょう。行を変更することが重要だと思います。

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

することが:

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

複数の変数でグループ化するには、これでうまくいくはずです。

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

それをありがとう。ただし、レシートが重複する場合があります(日付が異なる場合も同様)。したがって、トランザクションごとの受信数を実際に知りたい場合は、異なる日付でもすべての異なる受信を集計しますが、一意のトランザクションID変数はありません。同じ日にレシートが繰り返されるとは思いません。日付をグループ化の方法として使用できますか?df.groupby('reciept')['date'].count()同じ結果になりますdf.groupby('reciept')['prod_name'].count()
new_analyst

groupby呼び出し内にパラメーターとして日付を追加します。上記の私の回答を編集して、複数の変数でグループ化しました。
ライアン

0

私が理解できることから、あなたはあなたのレシート番号のヒストグラムを必要とするでしょう。あなたはこのようなものを試すことができます

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の繰り返し)の棒グラフが表示されます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.