pandas按某2列進行分層隨機抽樣的實現
在某些情況下,你可能需要按多列組合后的分組進行分層隨機抽樣。pandas 提供了靈活的數據操作方法,你可以使用 groupby 和 apply 方法結合 sample 來實現這種需求。具體來說,你可以先按多列分組,然后對每個分組進行隨機抽樣。
示例數據
首先,創(chuàng)建一個包含兩列的數據 DataFrame:
import pandas as pd
# 創(chuàng)建一個示例 DataFrame
data = {
'name': ['Alice', 'Bob', 'Charlie', 'David', 'Eve', 'Frank', 'Grace', 'Hannah',
'Alice', 'Bob', 'Charlie', 'David', 'Eve', 'Frank', 'Grace', 'Hannah'],
'age': [25, 30, 35, 40, 45, 50, 55, 60, 25, 30, 35, 40, 45, 50, 55, 60],
'city': ['New York', 'Los Angeles', 'Chicago', 'Houston', 'Phoenix', 'Philadelphia', 'San Antonio', 'San Diego',
'New York', 'Los Angeles', 'Chicago', 'Houston', 'Phoenix', 'Philadelphia', 'San Antonio', 'San Diego'],
'department': ['HR', 'Finance', 'IT', 'Marketing', 'Sales', 'R&D', 'Admin', 'HR',
'Finance', 'IT', 'Marketing', 'Sales', 'R&D', 'Admin', 'HR', 'Finance']
}
df = pd.DataFrame(data)
print(df)
# 輸出:
# name age city department
# 0 Alice 25 New York HR
# 1 Bob 30 Los Angeles Finance
# 2 Charlie 35 Chicago IT
# 3 David 40 Houston Marketing
# 4 Eve 45 Phoenix Sales
# 5 Frank 50 Philadelphia R&D
# 6 Grace 55 San Antonio Admin
# 7 Hannah 60 San Diego HR
# 8 Alice 25 New York Finance
# 9 Bob 30 Los Angeles IT
# 10 Charlie 35 Chicago Marketing
# 11 David 40 Houston Sales
# 12 Eve 45 Phoenix R&D
# 13 Frank 50 Philadelphia Admin
# 14 Grace 55 San Antonio HR
# 15 Hannah 60 San Diego Finance
按兩列分組并進行分層隨機抽樣
假設你希望按 city 和 department 列進行分組,并從每個組中隨機抽取一個樣本。你可以這樣實現:
import pandas as pd
# 創(chuàng)建一個示例 DataFrame
data = {
'name': ['Alice', 'Bob', 'Charlie', 'David', 'Eve', 'Frank', 'Grace', 'Hannah',
'Alice', 'Bob', 'Charlie', 'David', 'Eve', 'Frank', 'Grace', 'Hannah'],
'age': [25, 30, 35, 40, 45, 50, 55, 60, 25, 30, 35, 40, 45, 50, 55, 60],
'city': ['New York', 'Los Angeles', 'Chicago', 'Houston', 'Phoenix', 'Philadelphia', 'San Antonio', 'San Diego',
'New York', 'Los Angeles', 'Chicago', 'Houston', 'Phoenix', 'Philadelphia', 'San Antonio', 'San Diego'],
'department': ['HR', 'Finance', 'IT', 'Marketing', 'Sales', 'R&D', 'Admin', 'HR',
'Finance', 'IT', 'Marketing', 'Sales', 'R&D', 'Admin', 'HR', 'Finance']
}
df = pd.DataFrame(data)
print(df)
# 按 'city' 和 'department' 列分組,并對每個分組隨機抽取 1 行
sampled_df = df.groupby(['city', 'department']).apply(lambda x: x.sample(n=1, random_state=42)).reset_index(drop=True)
print(sampled_df)
具體步驟說明
- 按多列進行分組:使用
groupby(['city', 'department'])按city和department兩列進行分組。 - 對每個分組隨機抽樣:使用
apply和lambda函數對每個分組調用sample(n=1)隨機抽取一行。random_state參數用于設置隨機種子,以確保結果可重現。 - 重置索引:使用
reset_index(drop=True)重置索引,以避免保留分組鍵的索引信息。
輸出示例
根據樣本數據的不同,輸出可能會有所差異。以下是一個可能的輸出示例:
name age city department
0 Alice 25 Los Angeles Finance
1 Charlie 35 Chicago IT
2 Frank 50 Philadelphia R&D
3 Hannah 60 San Diego Finance
4 Bob 30 Houston Marketing
5 Grace 55 San Antonio HR
6 Alice 25 New York HR
7 Eve 45 Phoenix Sales
8 David 40 Houston Sales
9 Charlie 35 Chicago Marketing
10 Hannah 60 San Diego HR
11 Grace 55 San Antonio Admin
12 Bob 30 Los Angeles IT
13 David 40 New York Finance
14 Eve 45 Phoenix R&D
15 Frank 50 Philadelphia Admin
這樣,你可以輕松地對 DataFrame 中的多列進行分組,并從每個分組中進行分層隨機抽樣。這種技術在數據分析和機器學習中非常有用,可以幫助你從大數據集中獲得具有代表性的小樣本進行分析。
到此這篇關于pandas按某2列進行分層隨機抽樣的實現的文章就介紹到這了,更多相關pandas 某2列分層隨機抽樣內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
使用python+pygame開發(fā)消消樂游戲附完整源碼
消消樂小游戲相信大家都玩過,大人小孩都喜歡玩的一款小游戲,那么基于程序是如何實現的呢?今天帶大家,用python+pygame來實現一下這個花里胡哨的消消樂小游戲功能,感興趣的朋友一起看看吧2021-06-06
python利用pandas和csv包向一個csv文件寫入或追加數據
這篇文章主要給大家介紹了關于python利用pandas和csv包向一個csv文件寫入或追加數據的相關資料,我們越來越多的使用pandas進行數據處理,有時需要向一個已經存在的csv文件寫入數據,需要的朋友可以參考下2023-07-07

