У меня есть входной фрейм данных с идентификатором сотрудника и идентификатором отдела.
Сначала Мне нужно получить группу по количеству для каждого DeptID .
Затем я хочу агрегировать все записи, где количество меньше 10, и заменить deptID первыми тремя буквами с суффиксом _merged и добавьте их к счетчику этого объединенного DeptID .
Я могу выполнить первую половину, но нахожусь в тупике со второй половиной.
Позже мне также может потребоваться применить жесткое ограничение на количество идентификаторов объединенных отделов, т.е. не превышать, скажем, 100.
Входной кадр данных:
EmpID DeptID
8959236 YTCD
8597697 YTCZ
9312115 YTCD
2931213 YTCQ
9312197 QCVZ
4912748 YKKC
5474785 QCIO
1575364 MLQD
1575878 PCJZ
2915764 QCIO
Получить совокупное количество по идентификатору отдела:
agg_count_by_DeptID = df.groupby("DeptID")["DeptID"].count()
agg_count_by_DeptID серии pandas:
YTCD 20
YTCZ 2
YTCQ 4
YTCL 1
QCVZ 25
YKKC 11
QCIO 6
MLQD 9
PCJZ 7
QCIK 2
Логика вывода
Итерация по серии панд,
- Сначала получите все элементы, которые имеют общие первые три символа идентификатора отдела, например
YTCD, YTCZ, YTCQ и YTCL. - Сортируйте их в порядке возрастания (не обязательно, но полезно). иметь)
- Затем проверьте счетчик и,
если счетчик больше 10, оставьте его. - если count меньше 10, замените на FIRST-3-CHARS_merged
ожидаемой серией выходных панд:
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 оставляли как есть
Примечание. p>
Кадр выходных данных:
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
Подробнее здесь: https://stackoverflow.com/questions/790 ... ount-value