1. 程式人生 > 其它 >✍ Pandas分組(GroupBy)- 轉載@初生不惑

✍ Pandas分組(GroupBy)- 轉載@初生不惑

概要

任何分組(groupby)操作都涉及原始物件的以下操作之一。它們是

  • 分割物件
  • 應用一個函式
  • 結合的結果

在許多情況下,我們將資料分成多個集合,並在每個子集上應用一些函式。在應用函式中,可以執行以下操作

  • 聚合
  • 計算彙總統計轉換
  • 執行一些特定於組的操作過濾
  • 在某些情況下丟棄資料

建立一個DataFrame物件並對其執行所有操作 -

import pandas as pd

ipl_data = {'Team': ['Riders', 'Riders', 'Devils', 'Devils', 'Kings',
         '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)

得到以下結果:

Points  Rank    Team  Year
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

將資料拆分成組

import pandas as pd
ipl_data = {'Team': ['Riders', 'Riders', 'Devils', 'Devils', 'Kings',
         '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)
# 按多組分類
df.groupby(['Team','Year']).groups


返回結果:

{
'Devils': Int64Index([2, 3], dtype='int64'), 
'Kings': Int64Index([4, 6, 7], dtype='int64'), 
'Riders': Int64Index([0, 1, 8, 11], dtype='int64'), 
'Royals': Int64Index([9, 10], dtype='int64'), 
'kings': Int64Index([5], dtype='int64')
}

遍歷迭代分組

grouped = df.groupby('Year')
for name,group in grouped:
    print (name)
    print (group)
2014
   Points  Rank    Team  Year
0     876     1  Riders  2014
2     863     2  Devils  2014
4     741     3   Kings  2014
9     701     4  Royals  2014
2015
    Points  Rank    Team  Year
1      789     2  Riders  2015
3      673     3  Devils  2015
5      812     4   kings  2015
10     804     1  Royals  2015
2016
   Points  Rank    Team  Year
6     756     1   Kings  2016
8     694     2  Riders  2016
2017
    Points  Rank    Team  Year
7      788     1   Kings  2017
11     690     2  Riders  2017

選擇一個分組使用get_group()方法,可以選擇一個組:

grouped.get_group(2014)

原文出自【易百教程】,商業轉載請聯絡作者獲得授權,非商業請保留原文連結:https://www.yiibai.com/pandas/python_pandas_groupby.html



本文來自部落格園,作者:Arway,轉載請註明原文連結:https://www.cnblogs.com/cenjw/p/pandas-skill-groupby.html