Computer >> कंप्यूटर >  >> प्रोग्रामिंग >> Python

पायथन पांडस डेटाफ्रेम में प्रत्येक समूह का सबसे बड़ा चयन कैसे करें?

परिचय

डेटा विश्लेषण के दौरान प्रदर्शन करने के लिए सबसे बुनियादी और सामान्य संचालन में से एक समूह के भीतर कुछ स्तंभों के सबसे बड़े मूल्य वाली पंक्तियों का चयन करना है। इस पोस्ट में, मैं आपको दिखाऊंगा कि डेटाफ़्रेम के भीतर प्रत्येक समूह का सबसे बड़ा समूह कैसे खोजें।

समस्या..

आइए पहले कार्य को समझें, मान लें कि आपको मूवी डेटासेट दिया गया है और लोकप्रियता के आधार पर प्रत्येक वर्ष की सबसे लोकप्रिय फिल्म को सूचीबद्ध करने का अनुरोध किया गया है।

इसे कैसे करें..

1. डेटा तैयार करना।

वैसे Google डेटासेट से भरा है। मैं अपने डेटा विश्लेषण के लिए आवश्यक डेटासेट प्राप्त करने के लिए अक्सर kaggle.com का उपयोग करता हूं। kaggle.com पर बेझिझक लॉगिन करें और फिल्में खोजें। निर्देशिका में मूवी डेटासेट डाउनलोड करें और इसे पांडा डेटाफ़्रेम में आयात करें।

अगर आपने मेरे जैसे ही kaggle.com से डेटा डाउनलोड किया है, तो कृपया उस व्यक्ति को पसंद करें जिसने डेटा के साथ आपकी मदद की।

import pandas as pd
import numpy as np
movies = pd.read_csv("https://raw.githubusercontent.com/sasankac/TestDataSet/master/movies_data.csv")
के रूप में आयात करें
# see sample 5 rows
print(f"Output \n\n*** {movies.sample(n=5)} ")

आउटपुट

*** budget id original_language original_title popularity \
2028 22000000 235260 en Son of God 9.175762
2548 0 13411 en Malibu's Most Wanted 7.314796
3279 8000000 26306 en Prefontaine 8.717235
3627 5000000 10217 en The Sweet Hereafter 7.673124
4555 0 98568 en Enter Nowhere 3.637857

release_date revenue runtime status title \
2028 28/02/2014 67800064 138.0 Released Son of God
2548 10/04/2003 0 86.0 Released Malibu's Most Wanted
3279 24/01/1997 589304 106.0 Released Prefontaine
3627 14/05/1997 3263585 112.0 Released The Sweet Hereafter
4555 22/10/2011 0 90.0 Released Enter Nowhere

vote_average vote_count
2028 5.9 83
2548 4.7 77
3279 6.7 21
3627 6.8 103
4555 6.5 49

2. डेटा को समझने के लिए कुछ बुनियादी डेटा विश्लेषण करें।

# Identify the data-types
print(f"Output \n*** Datatypes are {movies.dtypes} ")
हैं

आउटपुट

*** Datatypes are budget int64
id int64
original_language object
original_title object
popularity float64
release_date object
revenue int64
runtime float64
status object
title object
vote_average float64
vote_count int64
dtype: object

2. अब, अगर हम मेमोरी उपयोग के गुच्छा को बचाना चाहते हैं तो हम फ्लोट64 और इंट64 के डेटाटाइप को परिवर्तित कर सकते हैं। लेकिन हमें सावधान रहना होगा और डेटा प्रकारों को परिवर्तित करने से पहले अपना होमवर्क करना होगा।

# Check the maximum numeric value.
print(f"Output \n *** maximum value for Numeric data type - {movies.select_dtypes(exclude=['object']).unstack().max()}")

# what is the max vote count value
print(f" *** Vote count maximum value - {movies[['vote_count']].unstack().max()}")

# what is the max movie runtime value
print(f" *** Movie Id maximum value - {movies[['runtime']].unstack().max()}")

आउटपुट

*** maximum value for Numeric data type - 2787965087.0
*** Vote count maximum value - 13752
*** Movie Id maximum value - 338.0

3. ऐसे कॉलम हैं जिन्हें 64 बिट्स में प्रदर्शित करने की आवश्यकता नहीं है और इसे 16 बिट तक लाया जा सकता है, तो चलिए इसे करते हैं। 64 बिट इंट रेंज -32768 से +32767 तक है। मैं इसे वोट_काउंट और रनटाइम के लिए करूँगा और आप इसे उन कॉलम के लिए कर सकते हैं जिनके लिए कम मेमोरी स्टोरेज की आवश्यकता होती है।

4. अब, प्रत्येक वर्ष के लिए सबसे लोकप्रिय फिल्म की पहचान करने के लिए, हमें रिलीज_डेट के अनुसार समूह बनाना होगा और लोकप्रियता का अधिकतम मूल्य प्राप्त करना होगा। एक विशिष्ट SQL नीचे जैसा कुछ दिखता है।

SELECT movie with max popularity FROM movies GROUP BY movie released year

5. दुर्भाग्य से हमारी रिलीज_डेट एक ऑब्जेक्ट डेटा-प्रकार है, उन्हें डेटाटाइम में बदलने के कुछ तरीके हैं। मैं सिर्फ साल के साथ एक नया कॉलम बनाना चुनूंगा ताकि मैं उस कॉलम को ग्रुपिंग के लिए इस्तेमाल कर सकूं।

movies['year'] = pd.to_datetime(movies['release_date']).dt.year.astype('Int64')
print(f"Output \n ***{movies.sample(n=5)}")

आउटपुट

*** budget id original_language original_title popularity \
757 0 87825 en Trouble with the Curve 18.587114
711 58000000 39514 en RED 41.430245
1945 13500000 152742 en La migliore offerta 30.058263
2763 13000000 16406 en Dick 4.742537
4595 350000 764 en The Evil Dead 35.037625

release_date revenue runtime status title \
757 21/09/2012 0 111.0 Released Trouble with the Curve
711 13/10/2010 71664962 111.0 Released RED
1945 1/01/2013 19255873 124.0 Released The Best Offer
2763 4/08/1999 27500000 94.0 Released Dick
4595 15/10/1981 29400000 85.0 Released The Evil Dead

vote_average vote_count year
757 6.6 366 2012
711 6.6 2808 2010
1945 7.7 704 2013
2763 5.7 67 1999
4595 7.3 894 1981

विधि 1 - ग्रुप बाय का उपयोग किए बिना

6. हमें केवल 3 कॉलम, मूवी टाइटल, मूवी रिलीज वर्ष और लोकप्रियता चाहिए। इसलिए हम उन कॉलमों को चुनते हैं और परिणाम कैसे दिखते हैं, यह देखने के लिए साल में सॉर्ट_वैल्यू का उपयोग करते हैं।

print(f"Output \n *** Method 1- Without Using Group By")
movies[["title", "year", "popularity"]].sort_values("year", ascending=True)

आउटपुट

*** Without Using Group By


<थड>

<थ>शीर्षक <वें>वर्ष
लोकप्रियता
4592 असहिष्णुता 1916 3.232447
4661 बड़ी परेड 1925 0.785744
2638 महानगर 1927 32.351527
4594 ब्रॉडवे मेलोडी 1929 0.968865
4457 पेंडोरा बॉक्स 1929 1.824184
... ... ... ...
2109 मैं आपके सामने 2016 53.161905
3081 जंगल 2016 19.865989
2288 घाटी से लड़ें 2016 1.224105
4255 ग्रोइंग अप स्मिथ 2017 0.710870
4553 अमेरिका अभी भी वही जगह है 0.000000

4803 पंक्तियाँ × 3 स्तंभ

8. अब परिणामों को देखते हुए, हमें एक वर्ष में सबसे लोकप्रिय फिल्म प्राप्त करने के लिए लोकप्रियता को भी क्रमबद्ध करने की आवश्यकता है। रुचि के कॉलम को सूची के रूप में पास करें। आरोही=गलत छँटाई का परिणाम अवरोही क्रम में होगा।

movies[["title", "year", "popularity"]].sort_values(["year","popularity"], ascending=False)


<थड>

<थ>शीर्षक <वें>वर्ष
लोकप्रियता
4255 ग्रोइंग अप स्मिथ 2017 0.710870
788 डेडपूल 2016 514.569956
26 कप्तान अमेरिका:गृहयुद्ध 2016 198.372395
10 बैटमैन बनाम सुपरमैन:डॉन ऑफ जस्टिस 2016 155.790452
64 एक्स-मेन:सर्वनाश 2016 139.272042
... ... ... ...
4593 ब्रॉडवे मेलोडी 1929 0.968865
2638 महानगर 1927 32.351527
4660 बड़ी परेड 1925 0.785744
4591 असहिष्णुता 1916 3.232447
4552 अमेरिका अभी भी वही जगह है 0.000000

4802 पंक्तियाँ × 3 स्तंभ

9. ठीक है, डेटा अब पूरी तरह से सॉर्ट किया गया है। तो अगला कदम यह है कि प्रत्येक वर्ष के लिए केवल पहला मान रखें और बाकी को हटा दें। लगता है कैसे करना है?.

हम .drop_duplicates पद्धति का उपयोग करेंगे।

movies[["title", "year", "popularity"]].sort_values(["year","popularity"], ascending=False).drop_duplicates(subset="year")


<थड>

<थ>शीर्षक <वें>वर्ष
लोकप्रियता
4255 ग्रोइंग अप स्मिथ 2017 0.710870
788 डेडपूल 2016 514.569956
546 मिनियंस 2015 875.581305
95 अंतरतारकीय 2014 724.247784
124 जमे हुए 2013 165.125366
... ... ... ...
4456 पेंडोरा बॉक्स 1929 1.824184
2638 महानगर 1927 32.351527
4660 बड़ी परेड 1925 0.785744
4591 असहिष्णुता 1916 3.232447
4552 अमेरिका अभी भी वही जगह है 0.000000

91 पंक्तियाँ × 3 स्तंभ

विधि 2 - ग्रुप बाय का उपयोग करना

हम ग्रुपबी के साथ भी ऐसा ही हासिल कर सकते हैं। दृष्टिकोण ऊपर दिखाए गए SQL के समान है।

print(f"Output \n *** Method 2 - Using Group By")
movies[["title", "year", "popularity"]].groupby("year", as_index=False).apply(lambda df:df.sort_values("popularity", ascending=False)
.head(1)).droplevel(0).sort_values("year", ascending=False)

आउटपुट

*** Method 2 - Using Group By


<थड>

<थ>शीर्षक <वें>वर्ष
लोकप्रियता
4255 ग्रोइंग अप स्मिथ 2017 0.710870
788 डेडपूल 2016 514.569956
546 मिनियंस 2015 875.581305
95 अंतरतारकीय 2014 724.247784
124 जमे हुए 2013 165.125366
... ... ... ...
38004 नरक के दूत 1930 8.484123
4457 पेंडोरा बॉक्स 1929 1.824184
2638 महानगर 1927 32.351527
4661 बड़ी परेड 1925 0.785744
4592 असहिष्णुता 1916 3.232447

90 पंक्तियाँ × 3 स्तंभ


  1. पायथन - पांडस डेटाफ्रेम के सबसेट का चयन कैसे करें

    मान लें कि Microsoft Excel में खोली गई हमारी CSV फ़ाइल की सामग्री निम्नलिखित हैं - सबसे पहले, CSV फ़ाइल से पंडों के डेटाफ़्रेम में डेटा लोड करें - dataFrame = pd.read_csv("C:\\Users\\amit_\\Desktop\\SalesData.csv") उपसमुच्चय का चयन करने के लिए वर्गाकार कोष्ठकों का प्रयोग करें। कोष्ठक म

  1. पायथन - पंडों के डेटाफ़्रेम से अशक्त पंक्तियों को कैसे छोड़ें?

    पंडों के डेटाफ़्रेम में अशक्त पंक्तियों को छोड़ने के लिए, ड्रॉपना () विधि का उपयोग करें। मान लें कि कुछ NaN यानी शून्य मानों वाली हमारी CSV फ़ाइल निम्नलिखित है - आइए read_csv() का उपयोग करके CSV फ़ाइल पढ़ें। हमारा सीएसवी डेस्कटॉप पर है - dataFrame = pd.read_csv("C:\\Users\\amit_\\Desktop\\Ca

  1. पाइथन पांडा में डेटाफ्रेम कॉलम मान को एक्स-अक्ष लेबल के रूप में कैसे सेट करें?

    पायथन पांडा में डेटाफ्रेम कॉलम मान को एक्स-अक्ष लेबल के रूप में सेट करने के लिए, हम xticks का उपयोग कर सकते हैं साजिश () . के तर्क में विधि। कदम फिगर साइज सेट करें और सबप्लॉट्स के बीच और आसपास पैडिंग को एडजस्ट करें। कॉलम1 कुंजी . के साथ पांडा का उपयोग करके डेटाफ़्रेम बनाएं । प्लॉट () . का उ