我目前正在为学校做一个项目,遇到一个小问题。我有一个airbnb数据集,我目前正在尝试填充“ Property_type”列中的某些NaN值,以“容纳”列的不同类别的属性类型最常用的值填充(返回多少特定Airbnb可以接受的人)。

这是列的示例

property_type   accommodates

Townhouse         2
Apartment         3
Townhouse         4
Townhouse         2
NaN               3
Townhouse         2
House             3
...               ...


在这种情况下,我想做的是找到可容纳3个人的最常用的属性类型,并用该类型的属性填充NaN值。

我的问题是要获得最普遍的价值(我知道以后该怎么做,但是此步骤不起作用)

我试图用此代码找到最常见的值

property_type_mode = airbnb[['property_type','accommodates']].groupby(['accommodates']).agg(lambda x:x.value_counts().index[0])


这将返回错误:

IndexError: index 0 is out of bounds for axis 0 with size 0


我不明白为什么,因为我为其他专栏做过类似的事情,而且行得通。

有谁知道我能做些什么来解决它!

感谢您的时间!!

最佳答案

我认为有返回的空索引数组(原因之一是缺少值),因此选择返回错误。解决方案是将nextiter一起使用,如果不匹配,则可能具有附加值:

f = lambda x: next(iter(x.value_counts().index), 'no match')
s = airbnb.groupby('accommodates')['property_type'].agg(f)

airbnb['property_type'] = airbnb['property_type'].fillna(airbnb['accommodates'].map(s))


另一个解决方案是使用dropna

f = lambda x: x.value_counts().index[0]
s = airbnb.dropna(subset=['accommodates']).groupby('accommodates')['property_type'].agg(f)

airbnb['property_type'] = airbnb['property_type'].fillna(airbnb['accommodates'].map(s))

关于python - 尝试使用groupby获得最常见的值并获取IndexError,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54829680/

10-10 23:51