首頁 > 軟體

深入解析pandas資料聚合和重組

2023-09-06 06:05:35

介紹pandas資料聚合和重組的相關知識,僅供參考。

1GroupBy技術

1.1簡介

簡介:根據一個或多個鍵進行分組,每一組應用函數,再進行合併

分組的鍵有多種形式:

  • 列表或陣列,長度與待分組的軸一樣
  • 表示DataFrame某個列名的值
  • 字典或Series,給出待分組軸上的值與分組名之間的對應關係
  • 函數,用於處理軸索引或索引中的各個標籤

範例:

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from pandas import Series,DataFrame
df =DataFrame({'key1':list('aabba'),'key2':['one','two','one','two','one'],
 'data1':np.random.randn(5),'data2':np.random.randn(5)}) 
#根據key1進行分組,並計算data1的均值。 
#注意下面的方式,取出來進行分組,而不是在DataFrame中分組,這種方式很靈活 
#可以看到這是一個GroupBy物件,具備了應用函數的基礎 
#這個過程是將Series進行聚合,產生了新的Series 
grouped = df['data1'].groupby(df['key1']) 
print(grouped,'n') 

 注:

取出來進行分組,而不是在DataFrame中分組分組鍵中的缺失值被排除在外 1.2對分組進行迭代

GroupBy物件支援迭代,可以產生一組二元元組(由分組名和資料塊組成)

 groupby預設在axis=0上進行分組,但可以設定在任何軸上分組

1.3選取一個或一組列

對於由DataFrame產生的GroupBy物件,如果用一個或一組列名進行索引,可實現選取部分列進行聚合的目的,即下面語法效果相同。

 1.4通過字典或Series進行分組

 假設已經知道列的分組方式,現在需要利用這個資訊進行分組統計。

下面為groupby傳入一個已知資訊的字典:

 相當於將每一個列重設名,再按新的名字進行求和。

Series也有這樣的功能,被看作一個固定大小的對映,可以用Series作為分組鍵,pandas會自動檢查對齊。

1.5利用函數進行分組

將函數、陣列、字典、Series混用也ok,因為最終都會轉換為陣列

2資料聚合

2.1簡介

簡介:

這裡的資料聚合是說任何能夠從陣列產生標量值的過程常見的聚合運算都有就地計算資料集統計資訊的優化實現。當然不止這些,可以用自己定義的運算,還可以呼叫分組物件上已經定義好的任何方法。

例:quantile可計算Series或DataFrame列的樣本分位數。

 對於自己定義的聚合函數,只需將其傳入aggregate或agg即可:

有些方法(describe)也可應用

 自定義函數比經過優化的函數要慢得多,這是因為在構造中間分組資料塊時存在非常大的開銷(函數呼叫、資料重排等)

可使用的函數:

2.1面向列的多函數應用

有時候需要對不同的列應用不同的函數 ,或者對一列應用不同的函數

 若傳入一組函數或函數名,得到的DataFrame列就會以相應的函數命名

上面有個問題就是列名是自動給出的,以函數名為列名,若傳入元組(name,function)組成的列表,就會自動將第一個元素作為列名

對兩列都應用functions:

 得到的結果的列名是層次化索引,可以直接用外層索引選取資料:

 如果想對不同的列應用不同的函數,具體的辦法是向agg傳入一個從列對映到函數的字典:

2.2以‘無索引’的方式返回聚合資料

到目前為止,範例中的聚合資料都是由唯一的分組鍵組成的索引(可能還是層次化的)

由於並不是總需要如此,可以向groupby傳入as_index = False禁用該功能

到此這篇關於pandas資料聚合和重組的文章就介紹到這了,更多相關pandas資料聚合內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com