groupby 并获取出现次数最多的条目 pandas

groupby and get entry with highest occurrence pandas

我有一个数据框,其中包含具有不同产品类型的城市的数据,例如:

city product_type
A B
A B
A D
A E
X B
X C
X C
X C

我想知道每个城市最常见的产品类型是什么。对于上面的df,A城市是B产品,X城市是C产品。

我试图通过首先分组然后遍历组并尝试找到出现次数最多的产品类型来解决这个问题,但它似乎不起作用:

d = df.groupby('city')['product_type']
prods=[]

for name,group in d:
    
    l = [group]
    
    prod = max(l, key=l.count)
    
    prods.append(prod)

print(prods)# this is list of products with highest occurrence in each city

这段代码似乎给了我所有的产品类型,而不仅仅是最常见的。

您可以尝试这样的操作:

data = pd.DataFrame({
    'city': ['A', 'A', 'A', 'A', 'X', 'X', 'X', 'X'],
    'product_type': ['B', 'B', 'D', 'E', 'B', 'C', 'C', 'C']
})

result_dict = {city: city_data.product_type.value_counts().index[0] 
    for city, city_data in data.groupby('city')}
print(result_dict)

这将生成字典:{'A': 'B', 'X': 'C'}。请注意,如果多个产品出现的次数相同,则此代码只会 return 其中一个。