Pandas 分組聚合操作詳解

2023-11-16 06:00:26

Pandas 是 Python 中用於資料分析的重要工具,它提供了豐富的資料操作方法。在資料分析過程中,經常需要對資料進行分組聚合操作。本文將介紹 Pandas 中的資料分組方法以及不同的聚合操作,並結合程式碼範例進行說明。

完整Excel資料

讀取資料並進行簡單分組

首先,我們通過 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)