对于与给定元组属于同一类的所有示例,是否按属性平均值处理python中缺少的值?
我有一个庞大的住房数据数据库,我需要用同一类的数据来填写缺失的值。例如,在“卧室”一栏中,缺少的数据需要用具有相同/相似大小和价格的房屋的平均卧室来填充。尺寸以平方英尺为单位存储在名为“面积”的属性中。面积和价格属性有很多不同的值,所以我有点困惑如何处理这个问题。在python中有没有一种简单的方法可以做到这一点?此外,是否将区域合并为具有较少不同值的区间,并找到每个区间的平均值更合适 以下是示例数据:对于与给定元组属于同一类的所有示例,是否按属性平均值处理python中缺少的值?,python,data-mining,Python,Data Mining,我有一个庞大的住房数据数据库,我需要用同一类的数据来填写缺失的值。例如,在“卧室”一栏中,缺少的数据需要用具有相同/相似大小和价格的房屋的平均卧室来填充。尺寸以平方英尺为单位存储在名为“面积”的属性中。面积和价格属性有很多不同的值,所以我有点困惑如何处理这个问题。在python中有没有一种简单的方法可以做到这一点?此外,是否将区域合并为具有较少不同值的区间,并找到每个区间的平均值更合适 以下是示例数据: location bedrooms Size(sq. ft.) price
location bedrooms Size(sq. ft.) price
abc 7 4500 5.5 Crore
cde 6 2250 2.1 Crore
bda 7 4500 4.75 Crore
abc NA 4500 4.5 Crore
abc 5 2250 2.3 Crore
bda NA 1350 54 Lakh
cde 5 1575 1.6 Crore
bda NA 2452 3.25 Crore
bda 3 1260 95 Lakh
cde 6 2250 2.15 Crore
abc 8 4500 3.5 Crore
您可以使用python中的and方法来获得所需的结果
例如:
d = {'col1': ['a', 'b', 'a', 'a', 'b', 'a'], 'col2': [3, 4, None, 5, None, 7], 'col3':[4,5,6,7,8,6]}
df = pd.DataFrame(data=d)
输出:
col1 col2 col3
0 a 3.0 4
1 b 4.0 5
2 a NaN 6
3 a 5.0 7
4 b NaN 8
5 a 7.0 6
现在使用groupby和transform方法:
df["col2"] = df.groupby("col1").transform(lambda x: x.fillna(x.mean()))
输出
col1 col2 col3
0 a 3.0 4
1 b 4.0 5
2 a 5.0 6
3 a 5.0 7
4 b 4.0 8
5 a 7.0 6
如您所见,col2中的Nan值已替换为col1中类的平均值。例如,指数2变为5,即(3+5+7)/3,指数4变为4,即4/1
如果您的情况是这样的,如果您想添加多个列作为“grouper”,您只需在groupby方法中传入更多列即可。但是,这些值仅取所有列中值完全相同的值的平均值。在您的情况下,您可以做的是:
df["bedrooms"] = df.groupby(["location","Size(sq. ft.)", "price"]).transform(lambda x: x.fillna(x.mean()))
因此,例如,如果位置为abc,大小为4000,价格为2000,则取三个值相同的所有值实例的平均值。但是,如果有一个列具有abc
,大小为4000
,价格为2001
,则它不会使用具有相同位置和大小但价格不同的值的平均值
为了使用一系列值的平均值,您需要一个定义相似性度量的helper列 请以数据结构而不是图片的形式共享数据。@balderman我该怎么做?整个数据集相当大,我这样做是为了简单。选择10或20行,作为问题的一部分上传它们。定义“相似”。是否完全匹配?如果指定要在该范围内使用的值的范围,则需要首先确定相似对您意味着什么。@EdekiOkoh有一些公共区域,例如9000平方英尺。对于这些区域,我可以使用精确匹配。然而,有一些罕见的价值,比如9200平方英尺。这些只是少数,我想使用9000平方英尺的平均值,因为这是一个普通的住宅面积。希望这是有道理的。这是一个很好的答案,但是有没有办法在没有熊猫的情况下做到这一点?