为了账号安全,请及时绑定邮箱和手机立即绑定

尝试使用 groupby 获取最常见的值并获取 IndexError

尝试使用 groupby 获取最常见的值并获取 IndexError

慕田峪4524236 2021-11-16 16:22:01
我目前正在为学校做一个项目,遇到了一个小问题。我有一个 airbnb 数据集,目前我正在尝试填充名为 Property_type 的列上的一些 NaN 值,其中包含列“容纳”的不同类别的属性类型的最常见值(它返回了多少特定Airbnb可以接受的人)。这是列的示例property_type   accommodatesTownhouse         2Apartment         3Townhouse         4Townhouse         2NaN               3Townhouse         2House             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我不明白为什么,因为我为其他专栏做过类似的事情并且它有效。有谁知道我能做些什么来解决它!!感谢您的时间!!
查看完整描述

1 回答

?
白衣染霜花

TA贡献1796条经验 获得超10个赞

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


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))


查看完整回答
反对 回复 2021-11-16
  • 1 回答
  • 0 关注
  • 205 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信