这是有问题的 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。
还请注意,虽然遗憾的是此时没有在示例中表达,但重要的是要同时考虑类型和品种来确定颜色。
我认为您的terrier
dict 中有一个错字(缺少品种中的下划线)。
在此更改后,这应该可以工作:
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] 删除。
我来说两句