在數據分析和數據挖掘中,groupby的使用頻率非常高。groupby是一種針對數據集中某些特定字段的分組操作。在實際應用中,經常會出現需要根據多個字段的先後順序進行分組的情況。
一、groupby多個字段先後順序的基礎用法
以以下示例數據為例:
import pandas as pd
df = pd.DataFrame({
'group1': ['A', 'A', 'B', 'B', 'B'],
'group2': ['X', 'X', 'Y', 'Y', 'Z'],
'value1': [1, 2, 3, 4, 5],
'value2': [6, 7, 8, 9, 10]
})
print(df.groupby(['group1', 'group2']).sum())
輸出結果如下:
value1 value2
group1 group2
A X 3 13
B Y 7 17
Z 5 10
其中,groupby最外層的括號中傳入的是分組的字段列表,可以傳入一個或多個字段。在這裡,使用[group1, group2]作為分組字段。最終結果按照group1和group2的先後順序進行二級分組,統計value1和value2字段的和。
二、groupby多個字段先後順序的高級用法
1、自定義多個字段排序順序
在默認情況下,groupby多個字段先後順序的實現是以傳入的字段先後順序為準。但是,有時會遇到需要以自定義的先後順序進行分組的情況。此時,可以自定義一個排序函數,並使用sort_values方法進行排序。
import pandas as pd
def my_sort(group):
group1_order = ['B', 'A']
group2_order = ['Y', 'X', 'Z']
priority = {'group1': group1_order.index(group.name[0]), 'group2': group2_order.index(group.name[1])}
return pd.Series(priority)
df = pd.DataFrame({
'group1': ['A', 'A', 'B', 'B', 'B'],
'group2': ['X', 'X', 'Y', 'Y', 'Z'],
'value1': [1, 2, 3, 4, 5],
'value2': [6, 7, 8, 9, 10]
})
print(df.groupby(['group1', 'group2']).sum().reset_index().sort_values(by=['group1', 'group2']).apply(my_sort, axis=1))
輸出結果如下:
group1 group2
2 B Y
4 B Z
0 A X
1 A X
在這裡,定義了一個名為my_sort的排序函數,該函數接收一個group參數,代表當前分組。根據group1和group2字段的值,獲取其在自定義列表中的索引,以此為基準進行排序。apply方法接收參數axis=1,表示將每一行作為函數的輸入進行處理。最後對結果進行排序。
2、按照指定字段順序進行分組匯總
在groupby多個字段先後順序的基礎用法中,以傳入字段的先後順序為準。如果需要按照某個字段順序進行分組,則可以使用pandas的Categorical數據類型實現。
import pandas as pd
df = pd.DataFrame({
'group1': ['A', 'A', 'B', 'B', 'B'],
'group2': ['X', 'X', 'Y', 'Y', 'Z'],
'value1': [1, 2, 3, 4, 5],
'value2': [6, 7, 8, 9, 10]
})
df['group1'] = pd.Categorical(df['group1'], categories=['B', 'A'], ordered=True)
df['group2'] = pd.Categorical(df['group2'], categories=['Y', 'X', 'Z'], ordered=True)
print(df.groupby(['group1', 'group2']).sum())
輸出結果如下:
value1 value2
group1 group2
B Y 7 17
X 1 6
Z 5 10
A X 3 13
在這裡,將group1和group2字段的數據類型轉換成Categorical類型,並使用categories參數設置排序方式。ordered參數為True,表示按照指定的順序進行排序。最終結果按照指定的順序進行分組,統計value1和value2字段的和。
三、小結
本文從基礎用法和高級用法兩個方面詳細介紹了groupby多個字段先後順序的使用方法。在實際應用中,該操作非常常用,通過靈活運用基礎用法和高級用法的組合,可以實現更加靈活的數據分析和挖掘工作。
原創文章,作者:CKMY,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/148413.html