遇到障碍,因此询问更大的社区。
我有一个输入数据框,其中包含员工 ID 和部门 ID。
首先,我需要按 DeptID 的计数获取组。
然后我想聚合计数小于 10 的所有条目,并将 deptID 替换为前 3 个字母,并以
_merged
为后缀,并将它们添加到此合并的 DeptID 的计数中。
我能够完成上半场,但下半场遇到了障碍。
稍后我可能还需要对合并的部门 ID 计数应用硬性限制,即不超过 100。
输入数据框:
EmpID DeptID
8959236 YTCD
8597697 YTCZ
9312115 YTCD
2931213 YTCQ
9312197 QCVZ
4912748 YKKC
5474785 QCIO
1575364 MLQD
1575878 PCJZ
2915764 QCIO
按部门 ID 获取聚合计数:
agg_count_by_DeptID = df.groupby("DeptID")["DeptID"].count()
agg_count_by_DeptID 熊猫系列:
YTCD 20
YTCZ 2
YTCQ 4
YTCL 1
QCVZ 25
YKKC 11
QCIO 6
MLQD 9
PCJZ 7
QCIK 2
输出逻辑
迭代熊猫系列,
FIRST-3-CHARS_merged
预期输出pandas系列:
YTCD 20
YTC_merged 7
QCVZ 25
YKKC 11
QCI_merged 8
MLQ_merged 9
PCJ_merged 7
注意:YTCZ、YTCQ 和 YTCL 的计数如何合计为
YTC_merged
,因为它们都小于 10,而 YTCD
保持原样
输出数据帧:
EmpID DeptID
8959236 YTCD
8597697 YTC_merged
9312115 YTCD
2931213 YTC_merged
9312197 QCVZ
4912748 YKKC
5474785 QCI_merged
1575364 MLQ_merged
1575878 PCJ_merged
2915764 QCI_merged
代码
thresh = 1 # you can change thresh to 10
cond = df.groupby('DeptID')['EmpID'].transform('count') > thresh
df['DeptID'] = df['DeptID'].where(cond, df['DeptID'].str[:3] + '_merged')
df
EmpID DeptID
0 8959236 YTCD
1 8597697 YTC_merged
2 9312115 YTCD
3 2931213 YTC_merged
4 9312197 QCV_merged
5 4912748 YKK_merged
6 5474785 QCIO
7 1575364 MLQ_merged
8 1575878 PCJ_merged
9 2915764 QCIO