python的新手。我有一个数据集,其中“汽车”列具有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)
除了排名前5名之外,我都想先将其他所有单词都作为词典使用
my dict = {'Miscellaneous' : 'Nissan', 'Honda', 'Renault', 'BMW',
'Land Rover', 'Volkswagen', 'Audi', 'Chrysler', 'Jaguar'}
我现在该如何继续看我的专车,如下所示:
汽车
福特
梅赛德斯-奔驰
日产
奥迪
美洲虎
其他
寻求帮助。谢谢
答案 0 :(得分:2)
您可以使用pandas.Categorical
处理这些类型的问题。 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
答案 1 :(得分:1)
我不太确定我了解您在做什么,但我想您可以做这样的事情:
[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'])
希望对您有帮助!