pandas 根据另一列赋值
pandas assigning values bases on another columns
我的数据框
Terrain
M1
M2
F
G
S
B1
B2
我想打开另一列 Terrain_Type 并分配值,例如,如果地形是 M1、M2、B1、B2 作为 Terrain_Type 中的复合材料,而地形中的 S 作为 Sod 在 [=21= 中] 而不是 F 和 G 我想在地形类型列中分配砾石。
我试过这个代码
data['Terrain_Type'] = data['Terrain'].map({['M1','M2','B1','B2']:'Composite', 'S':'Sod',['F','G']:'Gravel'})
但是没有成功。谁能建议我如何解决我的代码中的这个错误
我相信以下内容对您有用:)
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))
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','M2','F','G','S','B1','B2']})
d = {'Composite':['M1','M2','B1','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
我的数据框
Terrain
M1
M2
F
G
S
B1
B2
我想打开另一列 Terrain_Type 并分配值,例如,如果地形是 M1、M2、B1、B2 作为 Terrain_Type 中的复合材料,而地形中的 S 作为 Sod 在 [=21= 中] 而不是 F 和 G 我想在地形类型列中分配砾石。
我试过这个代码
data['Terrain_Type'] = data['Terrain'].map({['M1','M2','B1','B2']:'Composite', 'S':'Sod',['F','G']:'Gravel'})
但是没有成功。谁能建议我如何解决我的代码中的这个错误
我相信以下内容对您有用:)
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))
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','M2','F','G','S','B1','B2']})
d = {'Composite':['M1','M2','B1','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