python - 如何使用 Pandas 数据框中的集合填充字符串列?
问题描述
我有一个巨大的数据集,其中包含销售人员和经理的两个特定列。我想创建一个新列,根据不同的基础分配销售人员姓名。
假设在约翰经理的领导下,我有 4 位高管 - A、B、C、D
我想依次用高管 A、B、C 和 D 替换 John 手下的现有销售人员。
这是我想做的-
输入-
ID | 销售员 | 销售经理 |
---|---|---|
AM12 | 奥利弗 | 布伦 |
AM21 | 阿特雷尤 | 约翰 |
AM31 | 玛格丽塔 | 费尔 |
AM41 | 珍妮 | 费尔 |
AM66 | 奥马尔 | 约翰 |
AM81 | 迈克尔 | 纳蒂 |
AM77 | 奥兰 | 约翰 |
AM87 | 埃里卡 | 纳特兰 |
AM27 | 耶稣 | 约翰 |
AM69 | 兰迪 | 约翰 |
输出 -
ID | 销售员 | 销售经理 | 销售人员_新 |
---|---|---|---|
AM12 | 奥利弗 | 布伦 | 奥利弗 |
AM21 | 阿特雷尤 | 约翰 | 一种 |
AM31 | 玛格丽塔 | 费尔 | 玛格丽塔 |
AM41 | 珍妮 | 费尔 | 珍妮 |
AM66 | 奥马尔 | 约翰 | 乙 |
AM81 | 迈克尔 | 纳蒂 | 迈克尔 |
AM77 | 奥兰 | 约翰 | C |
AM87 | 埃里卡 | 纳特兰 | 纳特兰 |
AM27 | 耶稣 | 约翰 | D |
AM69 | 兰迪 | 约翰 | 一种 |
解决方案
我们可以做到这cumcount
一点.map
首先,我们需要建立一个ABCD
以四倍数重复的字典。
IE{0 : 'A', 1 : 'B', 2 : 'C', 3 : 'D', 4 : 'A'}
我们可以使用辅助函数和来自 itertools 库的一些方便的模块来做到这一点。
from itertools import cycle, zip_longest, islice
from string import ascii_uppercase
import pandas as pd
import numpy as np
def repeatlist(it, count):
return islice(cycle(it), count)
mapper = dict(zip_longest(range(50), repeatlist(ascii_uppercase[:4],50)))
df['SalesPersonNew'] = np.where(
df['Sales Manager'].eq('John'),
df.groupby('Sales Manager')['SalesPerson'].cumcount().map(mapper),
df['SalesPerson'])
print(df)
ID SalesPerson Sales Manager SalesPersonNew
0 AM12 Oliver Bren Oliver
1 AM21 Athreyu John A
2 AM31 Margarita Fer Margarita
3 AM41 Jenny Fer Jenny
4 AM66 Omar John B
5 AM81 Michael Nati Michael
6 AM77 Orlan John C
7 AM87 Erika Nateran Erika
8 AM27 Jesus John D
9 AM69 Randy John A
推荐阅读
- javascript - 以模态显示表单的 POST 数据
- fullcalendar - FullCalendar 每周活动限制
- python-3.x - AWS SageMaker:ValueError:y 中人口最少的类只有 1 个成员错误
- r - 下标和上标的 Markdown 代码
- mongodb - mongodb - $sort 仅子文档
- java - 执行目标 org.apache.maven.plugins:maven-resources-plugin:2.6:resources 的默认资源失败
- node.js - 为什么热重载不适用于 reactjs visual studio 2019 模板
- regex - 如何从字符串中提取所有 IMDb ID
- emscripten - 调用 EM_JS 函数时出现意外数量的参数
- android - OSMDroid 设置点击 CompassOverlay