使用 Python 對列表中按第 K 列對記錄進行分組
在 Python 中,可以使用 Python 方法(如使用 itertools.groupby 函式、使用字典和使用 pandas 庫)對列表中按第 k 列對記錄進行分組。透過按第 k 列對記錄進行分組,我們可以更有效地分析和操作資料。在本文中,我們將探討所有這些方法,並實現這些方法來對列表中按第 k 列對記錄進行分組。
方法 1:使用 itertools.groupby 函式
itertools.groupby 函式是基於鍵函式對元素進行分組的有用工具。此方法利用 itertools.groupby 函式根據第 K 列對記錄進行排序並將其分組。它為對列表中的記錄進行分組提供了一個簡潔高效的解決方案。
語法
list_name.append(element)
這裡,append() 函式是用於將元素新增到列表名稱末尾的列表方法。它透過將指定的元素作為新項新增到列表中來修改原始列表。
itertools.groupby(iterable, key=None)
這裡,groupby() 方法使用可迭代物件和鍵作為引數。
可迭代物件:這是輸入可迭代物件,可以是您要分組的任何序列或元素集合。
Key=None:這是一個可選引數,用於指定用作分組鍵的函式。如果未提供鍵函式(即傳遞 None),則元素本身用作分組鍵。
示例
在下面的示例中,我們首先使用 sorted 函式和 lambda 函式作為鍵根據第 K 列對 records 列表進行排序。然後,我們使用 itertools.groupby 根據相同的鍵對排序後的記錄進行分組。最後,我們將每個組追加到列表中並返回它。
import itertools
def group_by_kth_column(records, k):
sorted_records = sorted(records, key=lambda x: x[k-1])
groups = []
for key, group in itertools.groupby(sorted_records, key=lambda x: x[k-1]):
groups.append(list(group))
return groups
# Example usage
records = [
['Alice', 25, 'Engineer'],
['Bob', 30, 'Manager'],
['Charlie', 25, 'Designer'],
['David', 30, 'Engineer'],
['Eve', 25, 'Manager'],
['Frank', 30, 'Designer']
]
grouped_records = group_by_kth_column(records, 2)
# Output
for group in grouped_records:
print(group)
輸出
[['Alice', 25, 'Engineer'], ['Charlie', 25, 'Designer'], ['Eve', 25, 'Manager']] [['Bob', 30, 'Manager'], ['David', 30, 'Engineer'], ['Frank', 30, 'Designer']]
方法 2:使用字典
此方法使用字典根據第 K 列對記錄進行分組。它提供了一種簡單有效的方法來收集具有相同鍵值的記錄。
語法
list_name.append(element)
這裡,append() 函式是用於將元素新增到列表名稱末尾的列表方法。它透過將指定的元素作為新項新增到列表中來修改原始列表。
list(iterable)
這裡,list() 建構函式可以帶有一個可選的可迭代引數呼叫。如果提供,則可迭代物件的元素將轉換為新的列表。如果未給出任何引數,則會建立一個空列表。
示例
在下面的示例中,我們遍歷 records 列表,並使用第 K 列值作為鍵來訪問字典。如果鍵存在,我們將記錄追加到相應的列表中。否則,我們將建立一個新的鍵值對,其中鍵是第 K 列值,值是包含當前記錄的列表。最後,我們將字典值轉換為列表並返回它。
def group_by_kth_column(records, k):
groups = {}
for record in records:
key = record[k-1]
if key in groups:
groups[key].append(record)
else:
groups[key] = [record]
return list(groups.values())
# Example usage (same as before)
grouped_records = group_by_kth_column(records, 2)
# Output (same as before)
for group in grouped_records:
print(group)
輸出
[['Alice', 25, 'Engineer'], ['Charlie', 25, 'Designer'], ['Eve', 25, 'Manager']] [['Bob', 30, 'Manager'], ['David', 30, 'Engineer'], ['Frank', 30, 'Designer']]
方法 3:使用 pandas 庫
此方法利用強大的 pandas 庫來處理更大量的資料集並執行高階資料操作。它將記錄轉換為 DataFrame,並利用 groupby 按第 K 列對資料進行分組。
語法
grouped = df.groupby(key)
這裡,Pandas GroupBy 方法用於根據一個或多個鍵對 DataFrame 中的資料進行分組。“key”引數表示應按其對資料進行分組的列或列。生成的“grouped”物件可用於分別對每個組執行操作和計算。
示例
在下面的示例中,我們將 records 列表轉換為 pandas DataFrame。然後,我們使用 groupby 函式按第 K 列對 DataFrame 進行分組,並應用 lambda 函式將每個組轉換為記錄列表。最後,我們使用 tolist() 將分組後的 DataFrame 轉換為列表。
import pandas as pd
def group_by_kth_column(records, k):
df = pd.DataFrame(records)
grouped_df = df.groupby(k-1).apply(lambda x: x.values.tolist())
return grouped_df.tolist()
# Example usage (same as before)
grouped_records = group_by_kth_column(records, 2)
# Output (same as before)
for group in grouped_records:
print(group)
輸出
[['Alice', 25, 'Engineer'], ['Charlie', 25, 'Designer'], ['Eve', 25, 'Manager']] [['Bob', 30, 'Manager'], ['David', 30, 'Engineer'], ['Frank', 30, 'Designer']]
方法 3 - 使用 itertools.groupby()
Python 中的 itertools 模組提供了一個 groupby() 函式,該函式根據鍵函式對可迭代物件中的元素進行分組。
語法
list_name.append(element)
這裡,append() 函式是用於將元素新增到列表名稱末尾的列表方法。它透過將指定的元素作為新項新增到列表中來修改原始列表。
itertools.groupby(iterable, key=None)
這裡,groupby() 方法將可迭代物件作為輸入,並帶有一個可選的鍵函式。它返回一個迭代器,該迭代器生成包含可迭代物件中連續鍵和組的元組。鍵函式用於確定分組標準。
示例
在下面的示例中,我們使用了 itertools 模組中的 groupby() 函式。在應用 groupby() 函式之前,我們使用 lambda 函式根據日期對 events 列表進行了排序。groupby() 函式根據日期對事件進行分組,我們遍歷這些組以提取事件名稱,並將它們追加到 defaultdict 中相應日期的鍵中。結果字典顯示了分組後的記錄,其中每個日期都有一系列事件。
from itertools import groupby
# Creating a sample list of dates and events
events = [
('2023-06-18', 'Meeting'),
('2023-06-18', 'Lunch'),
('2023-06-19', 'Conference'),
('2023-06-19', 'Dinner'),
('2023-06-20', 'Presentation')
]
events.sort(key=lambda x: x[0]) # Sort the events based on dates
grouped_events = defaultdict(list)
for date, group in groupby(events, key=lambda x: x[0]):
for _, event in group:
grouped_events[date].append(event)
print(dict(grouped_events))
輸出
{
'2023-06-18': ['Meeting', 'Lunch'],
'2023-06-19': ['Conference', 'Dinner'],
'2023-06-20': ['Presentation']
}
結論
在本文中,我們討論瞭如何使用 Python 中的不同方法對列表中按第 k 列對記錄進行分組。我們實現了 itertools.groupby 函式、基於字典的分組以及使用 pandas 庫。透過每種方法,我們可以執行所需的分組,選擇取決於資料集的大小和所需的功能等因素。
資料結構
網路
關係資料庫管理系統
作業系統
Java
iOS
HTML
CSS
Android
Python
C 程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP