本文同步發表於小弟自架網站:微確幸資訊站
原始的問題為將學生亂數分成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

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