首页 > 解决方案 > Python pandas - 为另一列中的每个不同值显示列中记录数最多的值

问题描述

我有一个与此类似的表,但大约有 60,000 行,其中每个数字都是字符串的代码。我需要为 2 种最流行的车辆类型获取最流行的颜色。

data = pd.DataFrame({'Vehicle_type':[1 ,5 ,2 ,5 ,5 ,3 ,5 ,2 ,3 ,1 ,4 ,5 ,4 ,3 ,4 ,1 ,2 ,1], 
                    'Color':        [10,11,10,10,11,14,11,10,13,12,14,15,12,13,14,12,11,14]})

为了找到两种最受欢迎​​的车辆类型,我使用了这个:

data['Vehicle_type'].value_counts().head(2)

输出是:

5    5
1    4
Name: Vehicle_type, dtype: int64

要从该数据框中获取我使用的两种最受欢迎​​的车辆类型的所有颜色:

newdata = data['Vehicle_type'].apply(lambda x: x == 5 or x==1)
data[newdata]

输出:

Vehicle_type    Color
1                10
5                11
5                10
5                11
5                11
1                12
5                15
1                12
1                14

我被困在这里。我用 .groupby() 尝试了不同的方法,但我做不到。我想要的输出应该是这样的:

Vehicle_type    Color
   5             11
   1             12

谢谢你。

标签: pythonpandasdataframe

解决方案


这可能不是最优雅的解决方案,但它确实有效。

获取数据后,您可以添加一个始终为 1 的计数列,然后将其相加以获得每个计数:

data['count'] = 1

data = data.groupby(['Vehicle_type','Color']).sum()

这将为您提供一个数据框,其中包含所有车辆类型/颜色组合以及它们在计数列中的计数。

如果要导出数据,我通常会调用data.reset_index()以将所有内容显示得更整洁一些。

编辑:重新阅读您的问题并意识到您还要求最大值。调用reset_index()然后data[data['count'] == data['count'].max()]获取计数最多的车辆类型/颜色。


推荐阅读