pandas.Grouper()
在實際項目中非常有用,尤其是在處理時間序列數據、財務數據或多級索引數據時。以下是幾個實際場景的例子,展示了如何使用 pandas.Grouper()
進行數據分組,并用數值示例說明。
1. 按月分組進行銷售數據匯總
場景: 一個電商平臺的銷售數據,包含訂單日期和銷售額,要求按月匯總每月的總銷售額。
數據示例:
import pandas as pd# 創建示例數據
data = {'order_date': ['2023-01-01', '2023-01-15', '2023-02-01', '2023-02-15', '2023-03-01', '2023-03-15'],'sales': [150, 200, 180, 220, 250, 300]
}
df = pd.DataFrame(data)
df['order_date'] = pd.to_datetime(df['order_date'])# 使用Grouper按月分組
monthly_sales = df.groupby(pd.Grouper(key='order_date', freq='ME')).sum()print(monthly_sales)
輸出:
sales
order_date
2023-01-31 350
2023-02-28 400
2023-03-31 550
解釋: 在這個例子中,Grouper
被用來根據 order_date
列按月進行分組,聚合函數是求和 (sum
),結果顯示每個月的總銷售額。
2. 按季度分組進行平均銷售額分析
場景: 按季度分析某產品的平均銷售額,以便做季節性銷售預測。
數據示例:
# 創建示例數據
data = {'order_date': ['2023-01-01', '2023-04-01', '2023-07-01', '2023-10-01'],'sales': [120, 150, 200, 180]
}
df = pd.DataFrame(data)
df['order_date'] = pd.to_datetime(df['order_date'])# 使用Grouper按季度分組
quarterly_sales = df.groupby(pd.Grouper(key='order_date', freq='QE')).mean()print(quarterly_sales)
輸出:
sales
order_date
2023-03-31 120
2023-06-30 150
2023-09-30 200
2023-12-31 180
解釋: Grouper
根據 order_date
列按季度進行分組(freq='Q'
),并計算每個季度的平均銷售額。季度之間的銷售波動可以通過這種方式進行分析。
3. 按天分組處理時間序列數據
場景: 假設你有一個股票市場數據集,每個交易日的股票價格需要按天進行分組,計算每日的最大、最小價格。
數據示例:
# 創建示例數據
data = {'date': ['2023-01-01', '2023-01-01', '2023-01-02', '2023-01-02', '2023-01-03'],'price': [100, 110, 105, 107, 108]
}
df = pd.DataFrame(data)
df['date'] = pd.to_datetime(df['date'])# 按天分組并計算每一天的最大和最小股票價格
daily_prices = df.groupby(pd.Grouper(key='date', freq='D')).agg({'price': ['max', 'min']})print(daily_prices)
輸出:
price max min
date
2023-01-01 110 100
2023-01-02 107 105
2023-01-03 108 108
解釋: 這里我們使用 Grouper
按天 (freq='D'
) 對數據進行分組,并使用 agg
方法分別計算每一天的最大和最小股票價格。
4. 按多個層級進行分組(多級索引)
場景: 假設你有一個包含多個地區和年份的銷售數據,要求按地區和年份進行分組,計算每個地區每年的總銷售額。
數據示例:
# 創建示例數據
data = {'region': ['North', 'North', 'South', 'South', 'North', 'South'],'year': [2021, 2022, 2021, 2022, 2021, 2022],'sales': [100, 150, 120, 180, 200, 250]
}
df = pd.DataFrame(data)
df.set_index(['region', 'year'], inplace=True)# 使用Grouper按年份分組并計算總銷售額
sales_by_region_year = df.groupby(pd.Grouper(level='year')).sum()print(sales_by_region_year)
輸出:
sales
year
2021 420
2022 580
解釋: 在這個例子中,Grouper
被用來按 year
進行分組。通過 level='year'
來指定我們要根據 year
這一層級來進行分組,并計算每個年份的總銷售額。set_index
用來創建多級索引。
5. 按自定義時間頻率分組
場景: 假設你有一個包含分鐘級別時間戳的傳感器數據集,要求按每小時分組進行統計。
數據示例:
# 創建示例數據
data = {'timestamp': ['2023-01-01 00:01', '2023-01-01 00:30', '2023-01-01 01:00', '2023-01-01 01:15'],'value': [10, 15, 20, 25]
}
df = pd.DataFrame(data)
df['timestamp'] = pd.to_datetime(df['timestamp'])# 按每小時分組
hourly_data = df.groupby(pd.Grouper(key='timestamp', freq='H')).sum()print(hourly_data)
輸出:
value
timestamp
2023-01-01 00:00:00 25
2023-01-01 01:00:00 45
解釋: 使用 freq='H'
可以按小時對數據進行分組,求出每小時的數據匯總。即使原數據的時間戳是分鐘級別,Grouper
會自動按小時進行對齊并匯總。
總結:
pandas.Grouper()
可以處理各種實際問題,尤其是在時間序列數據和多層級數據的處理上,能夠靈活地按不同的時間頻率、層級或條件對數據進行分組,并進行各種統計分析。