English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
مثال على عملية GroupBy في Pandas
أي عملية groupby ستقوم بتنفيذ ما يلي على الكائن الأصلي:
قسمة الكائن تطبيق الدالة دمج النتائج
في العديد من الحالات، نقوم بتقسيم البيانات إلى عدة مجموعات، ثم نطبق بعض الوظائف على كل مجموعة. في وظيفة Apply، يمكننا تنفيذ ما يلي-
جمع − حساب الإحصاءات المجمعة تحويل − عمليات المجموعات تصفية − فرز البيانات تحت بعض الشروط
الآن نقوم بإنشاء عمود DataFrame ونقوم بكل العمليات عليه.
#إدخال المكتبة pandas import pandas as pd ipl_data = {'Team': ['Riders'، 'Riders'، 'Devils'، 'Devils'، 'Kings', الملوك، 'Kings'، 'Kings'، 'Riders'، 'Royals'، 'Royals'، 'Riders'], 'Rank': [1, 2, 2, 3, 3, 4, 1, 1, 2, 4, 1, 2], 'Year': [2014,2015,2014,2015,2014,2015,2016,2017,2016,2014,2015,2017], 'Points':[876,789,863,673,741,812,756,788,694,701,804,690] df = pd.DataFrame(ipl_data) print(df)
نتائج التنفيذ كالتالي:
نقاط ترتيب فريق سنة 0 876 1 Riders 2014 1 789 2 Riders 2015 2 863 2 Devils 2014 3 673 3 Devils 2015 4 741 3 Kings 2014 5 812 4 kings 2015 6 756 1 Kings 2016 7 788 1 Kings 2017 8 694 2 Riders 2016 9 701 4 Royals 2014 10 804 1 Royals 2015 11 690 2 Riders 2017
يمكن تقسيم الشكل إلى أي كائن. هناك العديد من طرق تقسيم الكائنات، مثل:
obj.groupby('key') obj.groupby(['key1','key2']) obj.groupby(key,axis=1)
الآن دعونا نرى كيف يمكن تطبيق كائن التجميع على كائن DataFrame
# import the pandas library import pandas as pd ipl_data = {'Team': ['Riders'، 'Riders'، 'Devils'، 'Devils'، 'Kings', الملوك، 'Kings'، 'Kings'، 'Riders'، 'Royals'، 'Royals'، 'Riders'], 'Rank': [1, 2, 2, 3, 3, 4, 1, 1, 2, 4, 1, 2], 'Year': [2014,2015,2014,2015,2014,2015,2016,2017,2016,2014,2015,2017], 'Points':[876,789,863,673,741,812,756,788,694,701,804,690] df = pd.DataFrame(ipl_data) print(df.groupby('Team'))
نتائج التنفيذ كالتالي:
# import the pandas library import pandas as pd ipl_data = {'Team': ['Riders'، 'Riders'، 'Devils'، 'Devils'، 'Kings', الملوك، 'Kings'، 'Kings'، 'Riders'، 'Royals'، 'Royals'، 'Riders'], 'Rank': [1, 2, 2, 3, 3, 4, 1, 1, 2, 4, 1, 2], 'Year': [2014,2015,2014,2015,2014,2015,2016,2017,2016,2014,2015,2017], 'Points':[876,789,863,673,741,812,756,788,694,701,804,690] df = pd.DataFrame(ipl_data) print(df.groupby('Team').groups)
نتائج التنفيذ كالتالي:
{'Kings': Int64Index([4, 6, 7], dtype='int64'), 'Devils': Int64Index([2, 3], dtype='int64'), 'Riders': Int64Index([0, 1, 8, 11], dtype='int64'), 'Royals': Int64Index([9, 10], dtype='int64'), 'kings' : Int64Index([5], dtype='int64')}
باستخدام المجموعات المتعددة
# import the pandas library import pandas as pd ipl_data = {'Team': ['Riders'، 'Riders'، 'Devils'، 'Devils'، 'Kings', الملوك، 'Kings'، 'Kings'، 'Riders'، 'Royals'، 'Royals'، 'Riders'], 'Rank': [1, 2, 2, 3, 3, 4, 1, 1, 2, 4, 1, 2], 'Year': [2014,2015,2014,2015,2014,2015,2016,2017,2016,2014,2015,2017], 'Points':[876,789,863,673,741,812,756,788,694,701,804,690] df = pd.DataFrame(ipl_data) print(df.groupby(['Team','Year']).groups)
نتائج التنفيذ كالتالي:
{('Kings', 2014): Int64Index([4], dtype='int64'), ('Royals', 2014): Int64Index([9], dtype='int64'), ('Riders', 2014): Int64Index([0], dtype='int64'), ('Riders', 2015): Int64Index([1], dtype='int64'), ('Kings', 2016): Int64Index([6], dtype='int64'), ('Riders', 2016): Int64Index([8], dtype='int64'), ('Riders', 2017): Int64Index([11], dtype='int64'), ('Devils', 2014): Int64Index([2], dtype='int64'), ('Devils', 2015): Int64Index([3], dtype='int64'), ('kings', 2015): Int64Index([5], dtype='int64'), ('Royals', 2015): Int64Index([10], dtype='int64'), ('Kings', 2017): Int64Index([7], dtype='int64')}
مع وجود obj من groupby، يمكننا استكشاف هذا العنصر مثل itertools.obj.
# import the pandas library import pandas as pd ipl_data = {'Team': ['Riders'، 'Riders'، 'Devils'، 'Devils'، 'Kings', الملوك، 'Kings'، 'Kings'، 'Riders'، 'Royals'، 'Royals'، 'Riders'], 'Rank': [1, 2, 2, 3, 3, 4, 1, 1, 2, 4, 1, 2], 'Year': [2014,2015,2014,2015,2014,2015,2016,2017,2016,2014,2015,2017], 'Points':[876,789,863,673,741,812,756,788,694,701,804,690] df = pd.DataFrame(ipl_data) grouped = df.groupby('Year') for name,group in grouped: print(name) print(group)
نتائج التنفيذ كالتالي:
2014 نقاط مركز الترتيب فريق سنة 0 876 1 Riders 2014 2 863 2 Devils 2014 4 741 3 Kings 2014 9 701 4 Royals 2014 2015 نقاط مركز الترتيب فريق سنة 1 789 2 Riders 2015 3 673 3 Devils 2015 5 812 4 kings 2015 10 804 1 Royals 2015 2016 نقاط مركز الترتيب فريق سنة 6 756 1 Kings 2016 8 694 2 Riders 2016 2017 نقاط تصنيف فرق سنة 7 788 1 Kings 2017 11 690 2 Riders 2017
بالتقديم، اسم العلامة الموجودة على groupby هو نفس اسم المجموعة.
باستخدام طريقة get_group()، يمكننا اختيار مجموعة.
# import the pandas library import pandas as pd ipl_data = {'Team': ['Riders'، 'Riders'، 'Devils'، 'Devils'، 'Kings', الملوك، 'Kings'، 'Kings'، 'Riders'، 'Royals'، 'Royals'، 'Riders'], 'Rank': [1, 2, 2, 3, 3, 4, 1, 1, 2, 4, 1, 2], 'Year': [2014,2015,2014,2015,2014,2015,2016,2017,2016,2014,2015,2017], 'Points':[876,789,863,673,741,812,756,788,694,701,804,690] df = pd.DataFrame(ipl_data) grouped = df.groupby('Year') print(grouped.get_group(2014))
نتائج التنفيذ كالتالي:
نقاط تصنيف فرق سنة 0 876 1 Riders 2014 2 863 2 Devils 2014 4 741 3 Kings 2014 9 701 4 Royals 2014
تعود الوظائف التجميعية إلى كل مجموعة قيمة تجمعية. بمجرد إنشاء عنصر التجميع، يمكن تنفيذ عدة عمليات تجميع على البيانات المجمعة.
طريقة واضحة هي استخدام التجميع أو طريقة agg المماثلة.
# import the pandas library import pandas as pd import numpy as np ipl_data = {'Team': ['Riders'، 'Riders'، 'Devils'، 'Devils'، 'Kings', الملوك، 'Kings'، 'Kings'، 'Riders'، 'Royals'، 'Royals'، 'Riders'], 'Rank': [1, 2, 2, 3, 3, 4, 1, 1, 2, 4, 1, 2], 'Year': [2014,2015,2014,2015,2014,2015,2016,2017,2016,2014,2015,2017], 'Points':[876,789,863,673,741,812,756,788,694,701,804,690] df = pd.DataFrame(ipl_data) grouped = df.groupby('Year') print(grouped['Points'].agg(np.mean))
نتائج التنفيذ كالتالي:
Year 2014 795.25 2015 769.50 2016 725.00 2017 739.00 Name: Points, dtype: float64
طريقة أخرى لمعرفة حجم كل مجموعة هي عن طريق تطبيق وظيفة size().
import pandas as pd import numpy as np ipl_data = {'Team': ['Riders'، 'Riders'، 'Devils'، 'Devils'، 'Kings', الملوك، 'Kings'، 'Kings'، 'Riders'، 'Royals'، 'Royals'، 'Riders'], 'Rank': [1, 2, 2, 3, 3, 4, 1, 1, 2, 4, 1, 2], 'Year': [2014,2015,2014,2015,2014,2015,2016,2017,2016,2014,2015,2017], 'Points':[876,789,863,673,741,812,756,788,694,701,804,690] df = pd.DataFrame(ipl_data) Access to Attribute in Python Pandas grouped = df.groupby('Team') print(grouped.agg(np.size))
نتائج التنفيذ كالتالي:
Points Rank Year Team Devils 2 2 2 Kings 3 3 3 Riders 4 4 4 Royals 2 2 2 kings 1 1 1
باستخدام Series المجموعة، يمكنك أيضًا نقل قائمة أو دictionary من الوظائف للجمع، وإنشاء DataFrame كنتج-
# import the pandas library import pandas as pd import numpy as np ipl_data = {'Team': ['Riders'، 'Riders'، 'Devils'، 'Devils'، 'Kings', الملوك، 'Kings'، 'Kings'، 'Riders'، 'Royals'، 'Royals'، 'Riders'], 'Rank': [1, 2, 2, 3, 3, 4, 1, 1, 2, 4, 1, 2], 'Year': [2014,2015,2014,2015,2014,2015,2016,2017,2016,2014,2015,2017], 'Points':[876,789,863,673,741,812,756,788,694,701,804,690] df = pd.DataFrame(ipl_data) grouped = df.groupby('Team') print(grouped['Points'].agg([np.sum, np.mean, np.std]))
نتائج التنفيذ كالتالي:
Team sum mean std Devils 1536 768.000000 134.350288 Kings 2285 761.666667 24.006943 Riders 3049 762.250000 88.567771 Royals 1505 752.500000 72.831998 الملوك 812 812.000000 NaN
تحويل على مجموعات أو أعمدة سيعود إلى فهرس، والذي حجمه يتوافق مع حجم العنصر المجموع. لذلك، يجب أن يكون الحجم الناتج متساوياً مع حجم قطعة المجموعة.
# import the pandas library import pandas as pd import numpy as np ipl_data = {'Team': ['Riders'، 'Riders'، 'Devils'، 'Devils'، 'Kings', الملوك، 'Kings'، 'Kings'، 'Riders'، 'Royals'، 'Royals'، 'Riders'], 'Rank': [1, 2, 2, 3, 3, 4, 1, 1, 2, 4, 1, 2], 'Year': [2014,2015,2014,2015,2014,2015,2016,2017,2016,2014,2015,2017], 'Points':[876,789,863,673,741,812,756,788,694,701,804,690] df = pd.DataFrame(ipl_data) grouped = df.groupby('Team') score = lambda x: (x - x.mean()) / x.std()*10 print(grouped.transform(score))
نتائج التنفيذ كالتالي:
نقاط المركز السنة 0 12.843272 -15.000000 -11.618950 1 3.020286 5.000000 -3.872983 2 7.071068 -7.071068 -7.071068 3 -7.071068 7.071068 7.071068 4 -8.608621 11.547005 -10.910895 5 NaN NaN NaN 6 -2.360428 -5.773503 2.182179 7 10.969049 -5.773503 8.728716 8 -7.705963 5.000000 3.872983 9 -7.071068 7.071068 -7.071068 10 7.071068 -7.071068 7.071068 11 -8.157595 5.000000 11.618950
تصفية تصفية البيانات بناءً على الشروط المحددة وإرجاع مجموعة فرعية من البيانات. وظيفة المرشح() تستخدم لتحديد البيانات.
import pandas as pd import numpy as np ipl_data = {'Team': ['Riders'، 'Riders'، 'Devils'، 'Devils'، 'Kings', الملوك، 'Kings'، 'Kings'، 'Riders'، 'Royals'، 'Royals'، 'Riders'], 'Rank': [1, 2, 2, 3, 3, 4, 1, 1, 2, 4, 1, 2], 'Year': [2014,2015,2014,2015,2014,2015,2016,2017,2016,2014,2015,2017], 'Points':[876,789,863,673,741,812,756,788,694,701,804,690] df = pd.DataFrame(ipl_data) print(df.groupby('Team').filter(lambda x: len(x) >= 3))
نتائج التنفيذ كالتالي:
نقاط مركز الترتيب فريق سنة 0 876 1 Riders 2014 1 789 2 Riders 2015 4 741 3 Kings 2014 6 756 1 Kings 2016 7 788 1 Kings 2017 8 694 2 Riders 2016 11 690 2 Riders 2017