समान मूल्यों को कैसे समूहबद्ध करें और पायथन में उनकी आवृत्ति की गणना करें?


10

Python के साथ एनालिटिक्स करने के लिए नौसिखिया कृपया सौम्य रहें :-) मुझे इस सवाल का जवाब नहीं मिला - माफी अगर यह पहले से ही एक अलग प्रारूप में कहीं और उत्तर दिया गया है।

मेरे पास रिटेल आउटलेट के लिए लेनदेन डेटा का डेटासेट है। स्पष्टीकरण के साथ चर हैं:

  • अनुभाग: स्टोर का अनुभाग, एक str;
  • prod_name: उत्पाद का नाम, एक str;
  • रसीद: चालान की संख्या, एक इंट;
  • खजांची, खजांची की संख्या, एक इंट;
  • लागत: आइटम की लागत, एक फ्लोट;
  • दिनांक, प्रारूप MM / DD / YY, एक str में;
  • समय, प्रारूप में HH: MM: SS, a str;

एकल लेन-देन में खरीदे गए सभी उत्पादों के लिए रसीद का मूल्य समान है, इस प्रकार इसका उपयोग एकल लेनदेन में की गई खरीद की औसत संख्या निर्धारित करने के लिए किया जा सकता है।

इस के बारे में जाने के लिए सबसे अच्छा तरीका क्या है? मैं अनिवार्य रूप groupby()से रसीद चर को अपने समान घटनाओं द्वारा समूह में उपयोग करना चाहता हूं ताकि मैं एक हिस्टोग्राम बना सकूं।

डेटा के साथ एक पांडा में काम करना 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 की है। नोट: मेरा डेटासेट बड़ा नहीं है, के बारे में 1 मिलियन पंक्तियाँ।


किया, कुछ नमूना डेटा जोड़ा।
new_analyst

जवाबों:


15

इस सैम्पल सेट से मैं रसीद के एक हिस्टोग्राम की उम्मीद करूँगा जो रसीद की दो घटनाओं को दर्शाता है 102857 (क्योंकि उस व्यक्ति ने एक लेनदेन में दो आइटम खरीदे थे) और एक घटना क्रमशः रसीद 102856 और रसीद 102858 की थी।

तब आप चाहते हैं:

df.groupby ( 'प्राप्ति')। receipt.count ()

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

चूंकि परिणाम अब डेटाफ्रेम नहीं है, हम इसे केवल उन मानों को दिखाने के लिए कैसे फ़िल्टर करते हैं जिनकी संख्या 1 से अधिक है?
निखिल वीजे

1
आप अभी भी ऐसा कर सकते हैं s[s>1], जैसेs=df.groupby('receipt').receipt.count()
Emre

2

मैं डेटा के आसपास कुछ ट्यूटोरियल एक साथ डाल रहा हूँ। शायद github पर मेरी जयुपिटर नोटबुक मदद करेगी। मुझे लगता है कि यह रेखा को संशोधित करने वाली कुंजी है:

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

होने के लिए:

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

कई चर द्वारा समूह के लिए यह काम करना चाहिए:

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

उसके लिए धन्यवाद। हालांकि, कभी-कभी रसीद दोहराई जाती है (जब तारीख भी अलग होती है)। इसलिए, हम रसीद के सभी अलग-अलग घटनाओं को अलग-अलग तिथियों पर भी एकत्रित कर रहे हैं, जब हम वास्तव में लेनदेन द्वारा रसीद की संख्या जानना चाहते हैं - हालांकि एक अद्वितीय लेनदेन आईडी चर नहीं है। मुझे नहीं लगता कि एक ही दिन रसीद दोहराई जाती है - क्या हम समूह के लिए तारीख का उपयोग कर सकते हैं? 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 सबसे अधिक दोहराव) को बार भूखंडों को बदल देगा।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.