我拥有一个庞大的住房数据数据库,我需要通过同一类来填写缺失的值。例如,在“卧室”列中,需要用大小/价格相同/相似的房屋的平均卧室来填充缺失的数据。尺寸以平方英尺为单位存储在名为“面积”的属性中。 “面积”和“价格”属性有很多不同的值,因此我对如何实现此方法感到有些困惑。有没有一种简单的方法可以在python中做到这一点?另外,将区域组合成间隔以具有较少的不同值并找到每个间隔的均值更合适吗?
以下是示例数据:
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
答案 0 :(得分:2)
您可以在python中使用groupby和transform方法来获得所需的结果。
示例:
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。
如果是这种情况,如果您想添加多个列作为“分组器”,则只需在groupby方法中传入更多列即可。但是,这些值仅取所有列中的值特别相同的那个值的平均值。您的情况是:
df["bedrooms"] = df.groupby(["location","Size(sq. ft.)", "price"]).transform(lambda x: x.fillna(x.mean()))
因此,例如,如果位置为abc
,大小为4000
,价格为2000
,则这三个值相同的所有值实例将取均值。但是,如果您有一列包含abc
,大小为4000
和价格为2001
的列,则不会使用位置和大小相同但价格不同的值的平均值。
您将需要一个帮助程序列,该列定义您的相似性度量,以便使用一系列值的平均值。