首页 > 解决方案 > 如何创建一个新列,将前 5 行和剩余的行合并为杂项?

问题描述

python的新手。我有一个数据集,其中“汽车”列有 87 个不同的值。我想更改列以在列中显示排名前 10 位的汽车品牌,其余 77 个将被归为杂项。下面的示例演示:

In[]:  car_sales['car'].unique()

Out[]: array(['Ford', 'Mercedes-Benz', 'Nissan', 'Honda', 'Renault', 'BMW',
   'Land Rover', 'Volkswagen', 'Audi', 'Chrysler', 'Jaguar',
   'Mitsubishi', 'Kia', 'Porsche', 'Toyota', 'Hyundai'], dtype=object)

除了前 5 名之外,我首先尝试将所有其他内容作为字典

my dict = {'Miscellaneous' :  'Nissan', 'Honda', 'Renault', 'BMW',
   'Land Rover', 'Volkswagen', 'Audi', 'Chrysler', 'Jaguar'}

我现在去看看我的柱车如下:

福特

奔驰

日产

奥迪

捷豹

各种各样的

寻求帮助。谢谢

标签: pythonpython-3.xpandas

解决方案


您可以使用pandas.Categorical来处理这些类型的问题。categoricaltype 还具有内存效率更高的额外好处。

例子:

cars = ['Ford', 'Mercedes-Benz', 'Nissan', 'Honda', 'Renault', 'BMW',
        'Land Rover', 'Volkswagen', 'Audi', 'Chrysler', 'Jaguar',
        'Mitsubishi', 'Kia', 'Porsche', 'Toyota', 'Hyundai']

df = pd.DataFrame({'cars': np.random.choice(cars, 100)})

top_5 = ['Ford', 'Mercedes-Benz', 'Nissan', 'Audi', 'Jaguar', 'Miscellaneous']

df['cars_refined'] = pd.Categorical(df['cars'], categories=top_5).fillna('Miscellaneous')

print(df.head(10))

            cars   cars_refined
0  Mercedes-Benz  Mercedes-Benz
1  Mercedes-Benz  Mercedes-Benz
2     Volkswagen  Miscellaneous
3           Ford           Ford
4     Mitsubishi  Miscellaneous
5         Toyota  Miscellaneous
6        Porsche  Miscellaneous
7          Honda  Miscellaneous
8            Kia  Miscellaneous
9         Jaguar         Jaguar

推荐阅读