an airplane is flying over a white building

Python學習筆記: Pandas 人員亂數分組及彙整小組成員

原始的問題為將學生亂數分成A、B、C三組:

姓名組別
0黃文欣B
1徐翠洋C
2林欣虹A
3吳語群B
4詹俊宏A
5林素元A
6洪偉誠B
7黃玉廷C
8黃瓊瑞C
9陳奕季B

目標是分組後的學生,新增一欄「小組成員」:

姓名組別小組成員
0黃文欣B[黃文欣, 吳語群, 洪偉誠, 陳奕季]
1徐翠洋C[徐翠洋, 黃玉廷, 黃瓊瑞]
2林欣虹A[林欣虹, 詹俊宏, 林素元]
3吳語群B[黃文欣, 吳語群, 洪偉誠, 陳奕季]
4詹俊宏A[林欣虹, 詹俊宏, 林素元]
5林素元A[林欣虹, 詹俊宏, 林素元]
6洪偉誠B[黃文欣, 吳語群, 洪偉誠, 陳奕季]
7黃玉廷C[徐翠洋, 黃玉廷, 黃瓊瑞]
8黃瓊瑞C[徐翠洋, 黃玉廷, 黃瓊瑞]
9陳奕季B[黃文欣, 吳語群, 洪偉誠, 陳奕季]
import pandas as pd
import numpy as np

# 先用亂數廠生的姓名做一個Dataframe
df = pd.DataFrame({'姓名':['黃文欣', '徐翠洋', '林欣虹', '吳語群', 
                         '詹俊宏', '林素元', '洪偉誠', '黃玉廷', '黃瓊瑞', '陳奕季'], 
                   })

# 準備將所有的學生做ABC的分組
group = 'ABC'

# df新增一個「組別」的欄位,由ABC亂數產生,長度為df
df["組別"] = np.random.choice(list(group), size=len(df))
df
# 將df以組別來分類後,所有的姓名轉成list,並把這個序列的命名改成「小組成員」
s = df.groupby('組別').姓名.agg(list).rename('小組成員')
print(type(s))
s

# 將原來的df串接上面做好的s
df = pd.merge(df, s, on='組別', how='left')
df

這樣就完成我們的目標了!!

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *