创建一个基于数据框中其他列的值创建新列的函数

莱格

这是有问题的 DF 的简化版本:

  df = pd.DataFrame({'type': ['terrier', 'toy','toy','toy', 'hound' , 'terrier', 
                              'terrier', 'terrier','terrier', 'hound'],
                     'breed' : ['yorkshire_terrier', 'king_charles_spaniel', 'poodle', 'shih_tzu',
                                'greyhound', 'west_highland', 'bull_terrier' , 'fox_terrier', 
                                'west_highland', 'afghan']})

  df

     type             breed
0   terrier          yorkshire_terrier
1   toy              king_charles_spaniel
2   toy              poodle
3   toy              shih_tzu
4   hound            greyhound
5   terrier          west_highland
6   terrier          bull_terrier
7   terrier          fox_terrier
8   terrier          west_highland
9   hound            afghan

我想创建一个函数,它考虑到每只狗的类型和品种,并根据这些字典的规则为其分配颜色:

toy = {'black' : ['poodle', 'shih_tzu'], 
       'mixed' : 'king_charles_spaniel'}

terrier = {'black_brown' : ['yorkshire_terrier','bull_terrier'],
           'white' : 'west_highland',
           'white_orange' : 'fox_terrier'}

hound = {'brindle' : 'greyhound',
           'brown' : 'afghan'}

以下预期 DF:

    type            breed                colour
0   terrier        yorkshire_terrier     black_brown
1   toy            king_charles_spaniel  mixed
2   toy            poodle                black
3   toy            shih_tzu              black
4   hound          greyhound             brindle
5   terrier        west_highland         white
6   terrier        bull_terrier          black_brown
7   terrier        fox_terrier           white_orange
8   terrier        west_highland         white
9   hound          afghan                brown

请注意,我希望该解决方案采用函数的形式,以便我能够将相同的解决方案应用于其他类似性质的 DF。

还请注意,虽然遗憾的是此时没有在示例中表达,但重要的是要同时考虑类型和品种来确定颜色。

尼古拉斯·佩鲁乔

我认为您的terrierdict 中有一个错字(缺少品种中的下划线)。

在此更改后,这应该可以工作:

def colours(x):
    for dog in [hound,toy,terrier]:
        for colour in dog:
            if x in dog[colour]:
                return colour

df['colour']=df['breed'].map(colours)

如果你有一个字典colours,将一个品种(键)与其相关的颜色联系起来,你可以简单地应用:

df['colour']=df['breed'].map(colours)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

熊猫数据框基于其他数据框的列创建一个新列

基于来自另一个数据框的其他列创建新列

根据其他列行中的过滤值,在pandas数据框中创建一个新列

基于熊猫数据框中的两列值创建一个新的数据框

创建一个新的数据框列作为其他列的函数

根据现有数据框中的其他列创建一个新列

根据数据框的其他列创建一个新的pandas数据框列

Pandas数据框:使用其他2列创建一个新列,该列是自定义函数

使用rnorm函数从数据框中创建基于新列的其他列

创建一个新的数据框列,该列是其他列的组合

如何基于另一个列中的值在pandas数据框列中创建新值

在数据框中创建一个新列,该列具有列表中该行的其他列的值

数据框,使用基于另一列索引的值创建一个新列

创建一个基于两列中的值创建新列的函数?

根据 R 中数据框中所有其他列中的字符串值,使用 dplyr 创建一个新列

数据框基于其他列创建新列

使用一些条件基于列中的值(在R中)创建一个新的数据框

使用数据集中其他列的值创建一个新列

如何在 Pandas 数据框中创建一个新列,其值由同一行中的其他列确定

如何创建一个新列,其值取决于其他列中的值?

根据pandas数据框中的其他列创建一个聚合列

根据其他2个数据框中的值创建新列

Pandas:创建一个新列,在其他两列中的值之间交替

根据其他列创建一个具有值的新列 - 在 R 中

根据其他列R中的不同值创建一个新列R

创建一个新列,在其他列中查找值

Python groupby - 根据其他列中的值创建一个新列

如何基于另一个数据框中的列值创建布尔列

将一个数据框中的百分比应用于其他数据框中的列以创建新数据框