如何创建一个新列,将前5行和其余的行合并为杂项?

2024-05-14 05:55:05 发布

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

一个python新手。我有一个数据集,其中“car”列有87个不同的值。我想把这个栏改成列前十大汽车品牌,剩下的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)

我试着把除前五名以外的所有其他人都当作字典

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

我现在怎么去看我的专栏车如下:

汽车

福特

梅赛德斯-奔驰

日产

奥迪

捷豹

其他

寻求帮助。谢谢


Tags: 数据car杂项rover汽车品牌land新手audi
2条回答

您可以使用^{}来处理这些类型的问题categorical类型还有一个额外的好处,就是内存效率更高

示例:

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

我不完全确定我理解你在做什么,但我猜你可以这样做:

[x for x in car_sales['car'] if x not in my_dict['Miscellaneous']] + ['Miscellaneous']

假设my_dict定义如下(注意dict中的值是一个集合):

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

所以您可以有这样的结果(我假设您使用的是numpy,并且希望结果是numpy数组):

new_array = np.array([x for x in car_sales['car'] if x not in my_dict['misc']] + ['Miscellaneous'])

我希望这有帮助

相关问题 更多 >