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

2024-10-05 14:30:30 发布

您现在位置:Python中文网/ 问答频道 /正文

我目前正在为学校做一个项目,我遇到了一个小问题。我有一个airbnb数据集,目前我正在尝试用列“容纳”的不同类别的属性类型的最常见值来填充一个名为Property\u 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

我不明白为什么,因为我在其他专栏里也做过类似的事情,而且很管用

有人知道我能做什么来解决吗

谢谢你抽出时间


Tags: 数据项目示例类型index属性typeproperty
1条回答
网友
1楼 · 发布于 2024-10-05 14:30:30

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

另一个解决方案是使用^{}

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

相关问题 更多 >