将值添加到 Pandas Dataframe 以构建具有加权平均值的排名系统
Add values to a Pandas Dataframe in order to make a ranking system with weighted averages
我不确定如何最好地描述它(我相信有更合适的描述方式)。
我有一个包含房屋细节(例如墙壁、浴室、卧室等)的大型数据集,我需要根据它们的特征对其进行分析和排名。我创建了一个排名系统,其中“4”是最好的,“0”是最差的,例如,一间卧室的房子可能会得到“0”的卧室分数,但一间有 3 个浴室的房子可能会得到“ 4 英寸的浴室得分。
一旦我将等级与所有特征相关联,我计划创建一个加权平均值以查看哪些房屋是最好的。
最好的方法是什么?我需要这样做大约 20 次(针对 20 个特征),到目前为止,这是我知道如何做的唯一方法——而且非常乏味,尤其是当我需要返回并更改任何内容时。
此外,最好能更好地了解 df.loc 函数的工作原理,我能够让它工作,但我不太了解它。
#EXAMPLE ONE, GRADING LAND USE
ParcelsData.loc[ParcelsData["land_use"] == 'Flum/Swim Floodway (Restrected)', 'LandUseGrade'] = 0
ParcelsData.loc[ParcelsData["land_use"] == 'Single Family Residential', 'LandUseGrade'] = 4
ParcelsData.loc[ParcelsData["land_use"] == 'Wasteland, Slivers, Gullies, Rock Outcrop', 'LandUseGrade'] = 0
ParcelsData.loc[ParcelsData["land_use"] == 'Single Family Residential - Common', 'LandUseGrade'] = 4
ParcelsData.loc[ParcelsData["land_use"] == 'Multi Family', 'LandUseGrade'] = 2
#EXAMPLE TWO, STORY
ParcelsData.loc[ParcelsData["HomeDetails_storyheight"] == '1 STORY', 'StoryGrade'] = 4
ParcelsData.loc[ParcelsData["HomeDetails_storyheight"] == '1.5 STORY', 'StoryGrade'] = 2
ParcelsData.loc[ParcelsData["HomeDetails_storyheight"] == '2.0 STORY', 'StoryGrade'] = 3
ParcelsData.loc[ParcelsData["HomeDetails_storyheight"] == '2.5 STORY', 'StoryGrade'] = 2
ParcelsData.loc[ParcelsData["HomeDetails_storyheight"] == '3.0 STORY', 'StoryGrade'] = 2
ParcelsData.loc[ParcelsData["HomeDetails_storyheight"] == 'RANCH W/BSMT', 'StoryGrade'] = 4
ParcelsData.loc[ParcelsData["HomeDetails_storyheight"] == 'BI-LEVEL', 'StoryGrade'] = 1
ParcelsData.loc[ParcelsData["HomeDetails_storyheight"] == 'SPLIT LEVEL', 'StoryGrade'] = 1
#EXAMPLE THREE, ACRES
ParcelsData.loc[ParcelsData["Acres"] <= .1, 'AcresGrade'] = 1
ParcelsData.loc[ParcelsData["Acres"] <= .2, 'AcresGrade'] = 2
ParcelsData.loc[ParcelsData["Acres"] <= .3, 'AcresGrade'] = 3
ParcelsData.loc[ParcelsData["Acres"] <= .4, 'AcresGrade'] = 7
ParcelsData.loc[ParcelsData["Acres"] <= .5, 'AcresGrade'] = 8
ParcelsData.loc[ParcelsData["Acres"] > .5, 'AcresGrade'] = 9
我会为 land_use 做这个,希望你明白。
有关详细信息,请参阅 https://pandas.pydata.org/docs/reference/api/pandas.Series.map.html
land_use_map = {
'Flum/Swim Floodway (Restrected)': 0,
'Single Family Residential': 4,
'Wasteland, Slivers, Gullies, Rock Outcrop': 0,
'Single Family Residential - Common': 4,
'Multi Family': 2,
}
ParcelsData['land_use'] = ParcelsData['LandUseGrade'].map(land_use_map)
我不确定如何最好地描述它(我相信有更合适的描述方式)。
我有一个包含房屋细节(例如墙壁、浴室、卧室等)的大型数据集,我需要根据它们的特征对其进行分析和排名。我创建了一个排名系统,其中“4”是最好的,“0”是最差的,例如,一间卧室的房子可能会得到“0”的卧室分数,但一间有 3 个浴室的房子可能会得到“ 4 英寸的浴室得分。
一旦我将等级与所有特征相关联,我计划创建一个加权平均值以查看哪些房屋是最好的。
最好的方法是什么?我需要这样做大约 20 次(针对 20 个特征),到目前为止,这是我知道如何做的唯一方法——而且非常乏味,尤其是当我需要返回并更改任何内容时。
此外,最好能更好地了解 df.loc 函数的工作原理,我能够让它工作,但我不太了解它。
#EXAMPLE ONE, GRADING LAND USE
ParcelsData.loc[ParcelsData["land_use"] == 'Flum/Swim Floodway (Restrected)', 'LandUseGrade'] = 0
ParcelsData.loc[ParcelsData["land_use"] == 'Single Family Residential', 'LandUseGrade'] = 4
ParcelsData.loc[ParcelsData["land_use"] == 'Wasteland, Slivers, Gullies, Rock Outcrop', 'LandUseGrade'] = 0
ParcelsData.loc[ParcelsData["land_use"] == 'Single Family Residential - Common', 'LandUseGrade'] = 4
ParcelsData.loc[ParcelsData["land_use"] == 'Multi Family', 'LandUseGrade'] = 2
#EXAMPLE TWO, STORY
ParcelsData.loc[ParcelsData["HomeDetails_storyheight"] == '1 STORY', 'StoryGrade'] = 4
ParcelsData.loc[ParcelsData["HomeDetails_storyheight"] == '1.5 STORY', 'StoryGrade'] = 2
ParcelsData.loc[ParcelsData["HomeDetails_storyheight"] == '2.0 STORY', 'StoryGrade'] = 3
ParcelsData.loc[ParcelsData["HomeDetails_storyheight"] == '2.5 STORY', 'StoryGrade'] = 2
ParcelsData.loc[ParcelsData["HomeDetails_storyheight"] == '3.0 STORY', 'StoryGrade'] = 2
ParcelsData.loc[ParcelsData["HomeDetails_storyheight"] == 'RANCH W/BSMT', 'StoryGrade'] = 4
ParcelsData.loc[ParcelsData["HomeDetails_storyheight"] == 'BI-LEVEL', 'StoryGrade'] = 1
ParcelsData.loc[ParcelsData["HomeDetails_storyheight"] == 'SPLIT LEVEL', 'StoryGrade'] = 1
#EXAMPLE THREE, ACRES
ParcelsData.loc[ParcelsData["Acres"] <= .1, 'AcresGrade'] = 1
ParcelsData.loc[ParcelsData["Acres"] <= .2, 'AcresGrade'] = 2
ParcelsData.loc[ParcelsData["Acres"] <= .3, 'AcresGrade'] = 3
ParcelsData.loc[ParcelsData["Acres"] <= .4, 'AcresGrade'] = 7
ParcelsData.loc[ParcelsData["Acres"] <= .5, 'AcresGrade'] = 8
ParcelsData.loc[ParcelsData["Acres"] > .5, 'AcresGrade'] = 9
我会为 land_use 做这个,希望你明白。
有关详细信息,请参阅 https://pandas.pydata.org/docs/reference/api/pandas.Series.map.html
land_use_map = {
'Flum/Swim Floodway (Restrected)': 0,
'Single Family Residential': 4,
'Wasteland, Slivers, Gullies, Rock Outcrop': 0,
'Single Family Residential - Common': 4,
'Multi Family': 2,
}
ParcelsData['land_use'] = ParcelsData['LandUseGrade'].map(land_use_map)