微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

大熊猫基于其他列分配值

如何解决大熊猫基于其他列分配值

我的数据框

Terrain     
M1
M2
F
G
S
B1
B2

我想打开另一列Terrain_Type并分配值,例如,如果Terrain_Type中的Terrain是M1,M2,B1,B2作为Composite,而Terrain_Type中的Terra是Sod,而不是F和G,我想分配Gravel地形类型列。

我尝试过这段代码

data['Terrain_Type'] = data['Terrain'].map({['M1','M2','B1','B2']:'Composite','S':'Sod',['F','G']:'Gravel'})

但是没有成功。有人可以建议我如何解决我的代码中的错误

解决方法

L1 = ['M1','M2','B1','B2']
d1 = dict.fromkeys(L1,'Composite')

L2 = ['F','G']
d2 = dict.fromkeys(L2,'Gravel')

L3 = ['S']
d3 = dict.fromkeys(L3,'Sod')

d = {**d1,**d2,**d3}

地图:

df['Terrain_Type'] = df['Terrain'].map(d)

输出:

  Terrain  Terrain_Type
0   M1     Composite
1   M2     Composite
2   F      Gravel
3   G      Gravel
4   S      Sod
5   B1     Composite
6   B2     Composite
,

您需要使用有效的词典进行映射,并且在您拥有的字典中,您正在使用列表作为键,这可能会出现问题。因此,我们假设字典是这样的:

import pandas as pd                                                                               
data = pd.DataFrame({'Terrain':['M1','F','G','S','B2']}) 

d = {'Composite':['M1','B2'],'Sod':['S'],'Gravel':['F','G']}

我们可以创建一个与此相反的图,将地形映射到类型:

new_dic = {}
for k,v in d.items():
    for x in v:
        new_dic[x]=k

new_dic                                                                                           
{'M1': 'Composite','M2': 'Composite','B1': 'Composite','B2': 'Composite','S': 'Sod','F': 'Gravel','G': 'Gravel'}

这将起作用:

data["Terain_Type"] = data["Terrain"].map(new_dic) 

data

  Terrain Terain_Type
0      M1   Composite
1      M2   Composite
2       F      Gravel
3       G      Gravel
4       S         Sod
5      B1   Composite
6      B2   Composite
,

我相信以下内容对您有用:)

def get_terrain_type(row):
    if row in ["M1","M2","B1","B2"]:
        return "Composite"
    elif row == "S":
        return "Sod"
    else:
        return "Gravel"
data["Terain_Type"] = data["Terrain"].map(lambda x: get_terrain_type(x))

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。