首页 > 解决方案 > 如何使用 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 兰迪 约翰 一种

标签: pythonpandas

解决方案


我们可以做到这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

推荐阅读