Pandas 是 Python 中用於資料分析的重要工具,它提供了豐富的資料操作方法。在資料分析過程中,經常需要對資料進行分組聚合操作。本文將介紹 Pandas 中的資料分組方法以及不同的聚合操作,並結合程式碼範例進行說明。
首先,我們通過 Pandas 讀取 Excel 檔案,並使用單個列進行分組,並應用聚合函數。範例程式碼如下:
df1 = pd.read_excel('C:\\Users\\liuchunlin2\\Desktop\\資料1.xlsx') df = df1.groupby('店鋪名稱', as_index=False).sum() print(df)
接著,我們演示瞭如何使用多個列進行分組,並應用聚合函數:
df2 = df1.groupby(['店鋪名稱','訂單號'], as_index=False).sum() print(df2)
在這個範例中,我們定義了一個自定義聚合函數 custom_agg
,並將其應用在分組聚合操作中:
def custom_agg(x): return x.max() - x.min() result = df1.groupby('店鋪名稱', as_index=False)['銷售數量'].agg(custom_agg) print(result)
我們還可以同時應用多個聚合函數,範例如下:
df3 = df1.groupby('店鋪名稱', as_index=False).agg({'銷售數量': 'sum', '銷售金額': 'mean'}) print(df3)
Pandas 支援迭代分組的操作,通過以下範例可以看到迭代分組的效果:
for group, data in df1.groupby('店鋪名稱'): print(group) # 分組的鍵值 print(data) # 所有屬於該分組的資料
根據條件過濾分組:
df4 = df1.groupby('店鋪名稱').filter(lambda x: x['銷售金額'].sum() > 300) print(df4)
最後,我們演示了分組資料的轉換以及分組排序的操作:
df1['NewColumn'] = df1.groupby('店鋪名稱')['銷售數量'].transform(lambda x:x.sum()) print(df1)
排序
df5 = df1.groupby('店鋪名稱').sum().sort_values('銷售數量', ascending=True) print(df5)
以上就是關於 Pandas 分組聚合操作的詳細介紹,通過這些範例程式碼和解釋,相信讀者對 Pandas 中的分組聚合操作有了更深入的理解。
總結:在資料分析中,對資料進行分組聚合是一項常見且重要的操作,Pandas 提供了豐富的功能來實現這一目的,包括單列分組、多列分組、自定義聚合函數、迭代分組、資料匯出、條件過濾、分組轉換以及分組排序等操作,能夠滿足大部分資料分析需求。
import pandas as pd import numpy as np # 讀取兩個 Excel 檔案 df1 = pd.read_excel('C:\\Users\\liuchunlin2\\Desktop\\資料1.xlsx') #使用單個列進行分組,並應用聚合函數 df=df1.groupby('店鋪名稱', as_index=False).sum() #df=df1.groupby('店鋪名稱', as_index=False).aggregate({'銷售數量': 'sum'}) print(df) #使用多個列進行分組,並應用聚合函數: df2=df1.groupby(['店鋪名稱','訂單號'], as_index=False).sum() print(df2) # 定義自定義聚合函數 def custom_agg(x): return x.max() - x.min() # 使用自定義聚合函數對 'Column2' 進行聚合 result = df1.groupby('店鋪名稱', as_index=False)['銷售數量'].agg(custom_agg) print(result) # 同時應用多個聚合函數 df3=df1.groupby('店鋪名稱', as_index=False).agg({'銷售數量': 'sum', '銷售金額': 'mean'}) print(df3) # 迭代分組 for group, data in df1.groupby('店鋪名稱'): print(group) # 分組的鍵值 print(data) # 所有屬於該分組的資料 df3.to_excel('merged.xlsx', index=False) print('這是一條資料分割線') #根據條件過濾分組 df4=df1.groupby('店鋪名稱').filter(lambda x: x['銷售金額'].sum() > 300) print(df4) #轉換分組 df1['NewColumn'] = df1.groupby('店鋪名稱')['銷售數量'].transform(lambda x:x.sum()) # 對 'Column2' 在每個分組內進行轉換操作 #df=df1.groupby('店鋪名稱', as_index=False)['銷售數量'].transform('sum') print(df1) #分組排序 df5=df1.groupby('店鋪名稱').sum().sort_values('銷售數量', ascending=True) # ascending=True 升序 ascending=False 降序 print(df5)