【问题标题】:Trying to use groupby to get the most common value and getting an IndexError尝试使用 groupby 获取最常见的值并获取 IndexError
【发布时间】:2019-02-22 23:23:24
【问题描述】:

我目前正在为学校做一个项目,但遇到了一个小问题。我有一个 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

我不明白为什么,因为我已经为其他专栏做过类似的事情,而且效果很好。

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

感谢您的宝贵时间!!

【问题讨论】:

  • 问题与machine-learning 无关 - 请不要向无关标签发送垃圾邮件(已删除)

标签: python pandas group-by nan


【解决方案1】:

我认为返回的是空索引数组(一个原因是缺少值),所以选择返回错误。解决方案是使用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))

【讨论】:

    猜你喜欢
    • 2017-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-08
    • 1970-01-01
    • 1970-01-01
    • 2017-01-06
    相关资源
    最近更新 更多