python-3.x - 创建一个函数,该函数根据数据框中其他列的值创建一个新列
问题描述
以下是相关 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。
还请注意,虽然很遗憾此时没有在示例中表达,但重要的是要考虑类型和品种来确定颜色。
解决方案
通过首先创建一个函数来检索密钥,我能够获得您正在寻找的结果。
def get_key(dog_type, val):
d = {'toy': toy, 'terrier':terrier, 'hound':hound}
my_dict = d[dog_type]
for key in my_dict.keys():
if val in my_dict[key]:
return key
else:
None
然后将该函数逐行应用于您的数据框,并将其应用到一个名为colour
.
df['colour'] = df.apply(lambda row: get_key(row['type'], row['breed']), axis=1)
注意:在您给定的字典west highland
中没有下划线,因此如果有任何breed
条目,west_highland
它将返回None
.
推荐阅读
- python - 如何循环遍历 Python 列表并对列表元素执行数学计算?
- javascript - 在对象内调用函数,Error: Uncaught TypeError: this.showValue is not a function
- apache - Apache HTTPS Certbot LetsEncrypt 问题
- reactjs - ReactRouter 4 在其他路由上重定向到主页
- r - 从 data.frame 中提取列的速度比从矩阵中提取的快 - 为什么?
- android - 致命异常:android.app.RemoteServiceException ....无法创建图标:StatusBarIcon
- spring-boot - 多模块项目触发数据流管道时出错:无法将 url (jar:file:/home/java/app.war!/WEB-INF/classes!/) 转换为文件
- c# - 如何为组合框使用类似 ReadOnly 的样式
- javascript - 如何在 Angular 6 中使用异步获取 JSON 对象中的数据集合?
- java - java.text.annotation 有什么用?我已经参考了 java 文档,但无法掌握