通过属性平均值处理python中与给定元组属于同一类的所有样本的缺失值?

时间:2019-02-20 17:59:53

标签: python data-mining

我拥有一个庞大的住房数据数据库,我需要通过同一类来填写缺失的值。例如,在“卧室”列中,需要用大小/价格相同/相似的房屋的平均卧室来填充缺失的数据。尺寸以平方英尺为单位存储在名为“面积”的属性中。 “面积”和“价格”属性有很多不同的值,因此我对如何实现此方法感到有些困惑。有没有一种简单的方法可以在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

1 个答案:

答案 0 :(得分:2)

您可以在python中使用groupbytransform方法来获得所需的结果。

示例:

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的列,则不会使用位置和大小相同但价格不同的值的平均值。

您将需要一个帮助程序列,该列定义您的相似性度量,以便使用一系列值的平均值。