Python'da aynı değerleri nasıl gruplayabilir ve frekanslarını nasıl sayabilirim?


10

Python ile analitik yeni başlayanlar bu yüzden lütfen nazik olun :-) Bu sorunun cevabını bulamadım - başka bir yerde farklı bir formatta zaten cevaplandıysa özür dilerim.

Bir perakende satış mağazası için işlem verileri veri kümem var. Açıklama ile birlikte değişkenler:

  • bölüm: mağazanın bölümü, bir str;
  • prod_name: ürünün adı, str;
  • makbuz: faturanın numarası, int;
  • kasiyer, kasiyer sayısı, int;
  • maliyet: öğenin maliyeti, bir kayan nokta;
  • tarih, AA / GG / YY biçiminde, bir str;
  • saat, SS: DD: SS, str;

Makbuz, tek bir işlemde satın alınan tüm ürünler için aynı değere sahiptir, bu nedenle tek bir işlemde yapılan ortalama satın alma sayısını belirlemek için kullanılabilir.

Bununla ilgili en iyi yol nedir? Esasen groupby(), bir histogram oluşturabilmem için makbuz değişkenini kendi özdeş olaylarına göre gruplandırmak için kullanmak istiyorum .

Pandalar DataFrame'deki verilerle çalışma.

DÜZENLE:

Üstbilgi içeren bazı örnek veriler (prod_name aslında onaltılık bir sayıdır):

 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 

Bu örnek kümesinden, 102857 makbuzunun iki tekrarını gösteren bir makbuz histogramı beklemekteyim (bu kişi bir işlemde iki öğe satın aldığından) ve sırasıyla 102856 makbuzunun ve 102858 makbuzunun bir kez gerçekleştiğini gösterir. Not: Veri setim çok büyük değil, hakkında 1 milyon sıra.


Tamam, bazı örnek veriler eklendi.
new_analyst

Yanıtlar:


15

Bu örnek setinden, 102857 makbuzunun iki tekrarlamasını gösteren bir makbuz histogramı beklemekteyim (bu kişi bir işlemde iki kalem satın aldığından) ve sırasıyla 102856 makbuzunun ve 102858 makbuzunun bir oluşumunu beklerim.

O zaman istediğiniz:

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

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

sonuç artık bir veri çerçevesi olmadığından, yalnızca 1'den fazla sayımı olan değerleri göstermek için bunu nasıl filtreleyebiliriz?
Nikhil VJ

1
Yine de böyle şeyler yapabilirsiniz s[s>1],s=df.groupby('receipt').receipt.count()
Emre

2

Verilerin boğulmasına ilişkin bazı eğiticileri bir araya getiriyorum. Belki de github üzerindeki jupyter defterim yardımcı olacaktır. Bence satırın değiştirilmesinin anahtarı budur:

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

olmak:

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

Birden çok değişkene göre gruplandırmak için bu işlemin çalışması gerekir:

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

Bunun için teşekkürler. Ancak, bazen makbuz tekrarlanır (tarih de farklı olduğunda). Bu nedenle, işlem yoluyla makbuz sayısını gerçekten bilmek istediğimizde, farklı tarihlerde bile tüm farklı makbuz örneklerini bir araya getiriyoruz - ancak benzersiz bir işlem kimliği değişkeni yok. Aynı gün makbuz tekrarlarını sanmıyorum - tarihi gruplamanın bir yolu olarak kullanabilir miyiz? df.groupby('reciept')['date'].count()aynı sonucu verirdf.groupby('reciept')['prod_name'].count()
new_analyst

Groupby çağrısında parametre olarak tarih ekleyin. Yukarıdaki cevabımı birden çok değişkene göre gruplandırmak için düzenledi.
Ryan

0

Anlayabildiğim kadarıyla, makbuz no. Böyle bir şey deneyebilirsin

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()

Bu size en çok yinelenen fatura numaralarının çubuk grafiğini verecektir (en çok 20 yinelenen) Az ya da çok elde etmek için kafa işlevindeki sayıyı değiştirin.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.