파이썬에서 동일한 값을 그룹화하고 빈도를 계산하는 방법은 무엇입니까?


10

파이썬으로 분석하는 초보자이므로 조심하십시오.

소매점에 대한 거래 데이터의 데이터 집합이 있습니다. 설명과 함께 변수는 다음과 같습니다.

  • 섹션 : 상점의 섹션, str;
  • prod_name : 제품 이름, str;
  • 영수증 : 송장 번호, int;
  • 출납원, 출납원 수, 정수;
  • 비용 : 품목의 비용, 플로트;
  • 날짜는 MM / DD / YY 형식으로 str입니다.
  • HH : MM : SS 형식의 시간, str;

영수증은 단일 거래에서 구매 한 모든 제품에 대해 동일한 값을 가지므로 단일 거래에서 이루어진 평균 구매 수를 결정하는 데 사용될 수 있습니다.

이 문제를 해결하는 가장 좋은 방법은 무엇입니까? 필자 groupby()는 히스토그램을 만들 수 있도록 영수증 변수를 동일한 발생으로 그룹화하는 데 기본적으로 사용하고 싶습니다 .

팬더 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 (사람이 한 번의 트랜잭션으로 두 개의 품목을 구매했기 때문에)과 영수증 102856과 영수증 102858의 각각 한 번의 발생을 보여주는 영수증의 히스토그램을 예상 할 것입니다. 백만 줄.


샘플 데이터를 추가했습니다.
new_analyst

답변:


15

이 샘플 세트에서 나는 두 번의 영수증 102857 (사람이 한 번의 트랜잭션으로 두 개의 품목을 구매했기 때문에)과 영수증 102856 및 영수증 102858의 각각 한 번의 발생을 보여주는 영수증의 히스토그램을 예상 할 것입니다.

그런 다음 원하는 것 :

df.groupby ( '영수증') .receipt.count ()

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

결과가 더 이상 데이터 프레임이 아니므로 카운트가 1보다 큰 값만 표시하도록 어떻게 필터링합니까?
Nikhil VJ

1
여전히 다음과 같은 작업을 수행 할 수 있습니다 s[s>1].s=df.groupby('receipt').receipt.count()
Emre

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

그룹 별 호출 내에 매개 변수로 날짜를 추가하십시오. 여러 변수로 그룹화하기 위해 위의 답변을 편집했습니다.
Ryan

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.