Python 处理dataframe列中的大量不同值
python新手,使用python进入数据分析领域。 我正在处理实践数据,其中一列有87个不同的值,另一列有888个不同的值,我想删除后一列。我只是不明白如何处理这些专栏。我是将这些列分组还是删除这些列。如果我是一个团队,那我该怎么做!?非常感谢你的想法@托比·佩蒂@Vaishali 例:Python 处理dataframe列中的大量不同值,python,pandas,Python,Pandas,python新手,使用python进入数据分析领域。 我正在处理实践数据,其中一列有87个不同的值,另一列有888个不同的值,我想删除后一列。我只是不明白如何处理这些专栏。我是将这些列分组还是删除这些列。如果我是一个团队,那我该怎么做!?非常感谢你的想法@托比·佩蒂@Vaishali 例: 将熊猫作为pd导入 将颠簸导入为np print(“汽车不同条目的计数:”,len(设置(汽车销售['car']))) 打印(“汽车的不同条目:”,设置(汽车销售['car']) car的不同条目计数:87
将熊猫作为pd导入
将颠簸导入为np
print(“汽车不同条目的计数:”,len(设置(汽车销售['car'])))
打印(“汽车的不同条目:”,设置(汽车销售['car'])
car的不同条目计数:87
car的不同条目:{'兰博基尼'、'UAZ'、'Daewoo'、'Jeep'、'ferari'、'Bentley'、'Mercury'、'MINI'、'Acura'、'landrover'、'Aston Martin'、'Fisker'、'Dodge'、'Fiat'、'MG'、'Samsung'、'Rolls-Royce'、'sford'、'Moskvich Izh'、'Samand'、'Audi'、'Dadi'、'gely'、'Dacia'、'dahatsu'、'Maserati'、'voln、SMA、悍马、保时捷、斯巴鲁、阿尔法罗密欧、萨博、别克、马自达、梅赛德斯-奔驰、雷克萨斯、哈飞、雷诺、铃木、克莱斯勒、比亚迪、莫斯科维奇-阿兹尔克、捷豹、斯马特、扎兹、格罗兹、英菲尼迪、塔塔、力帆、ZX、五十铃、罗孚、本田、三菱、卡迪拉克、一汽、阿罗、瓦茨堡、GMC、长城、兰奇“a”、“Bogdan”、“起亚”、“宝马”、“江淮”、“特斯拉”、“座椅”、“巴克斯”、“VAZ”、“黄海”、“丰田”、“雪铁龙”、“其他复古车型”、“奇瑞”、“欧宝”、“雪佛兰”、“斯柯达”、“UAZ”、“长安”、“GAZ”}
你的问题是什么
更新:经过一些澄清/猜测后,我将假设问题涉及两个问题:
groupby
限制为仅顶部k
组(通过一些选择集合)sns
包含一些漂亮的数据集,这些数据集对于此类问题非常方便,例如,下面我们将使用“mpg”,其中包含一些汽车和里程信息
import pandas as pd
import numpy as np
import seaborn as sns
df = sns.load_dataset('mpg')
我们将提供的名称
分为品牌
和型号
:
df[['brand', 'model']] = pd.DataFrame(df.name.str.split(' ', n=1).values.tolist())
df.head(3)
Out[]:
mpg cylinders displacement horsepower weight acceleration \
0 18.0 8 307.0 130.0 3504 12.0
1 15.0 8 350.0 165.0 3693 11.5
2 18.0 8 318.0 150.0 3436 11.0
model_year origin name brand model
0 70 usa chevrolet chevelle malibu chevrolet chevelle malibu
1 70 usa buick skylark 320 buick skylark 320
2 70 usa plymouth satellite plymouth satellite
稍后,我们将添加一列n
,用于计算统计数据的条目数:
df['n'] = 1
根据maximumacceleration
(OP希望使用总销售额,因此在他的案例中,我们将使用sales.sum()
而不是acceleration.max()
,但这里我们没有销售数字)。重点是为我们想要报告的组建立一个索引(并将其他组重命名为“others”).我们将我们称之为idx
的索引转换为元组列表,以便于子集设置
idx = df.groupby(['brand', 'model']).acceleration.max().sort_values(ascending=False).head(5).index.to_list()
idx
Out[]:
[('peugeot', '504'),
('vw', 'pickup'),
('vw', 'dasher (diesel)'),
('volkswagen', 'type 3'),
('chevrolet', 'chevette')]
现在为所选组构建一个布尔选择器top10
,该选择器为True
top10 = df.set_index(['brand', 'model']).index.isin(idx)
重命名其他名称:
df.loc[~top10, 'brand'] = 'Other'
df.loc[~top10, 'model'] = ''
现在,对于非数字列,我们选择报告多数值(组中最常见的值)
最后,我们定义了用于各个列的聚合器目录:
# numeric: use mean
desired = {k:'mean' for k in df.columns if np.issubdtype(df[k], np.number)}
# simplified:
desired = {k:'mean' for k in ['mpg', 'horsepower', 'weight']}
# non-numeric: use majority
desired.update({'origin': majority})
# also report the size of each group
desired.update({'n': 'sum'})
现在,执行groupby和aggregate操作:
df.groupby(['brand', 'model']).agg(desired)
Out[]:
mpg horsepower weight origin n
brand model
Other 23.340052 105.540682 2984.651163 usa 387
chevrolet chevette 30.400000 63.250000 2090.250000 usa 4
peugeot 504 23.550000 83.500000 3022.250000 europe 4
volkswagen type 3 23.000000 54.000000 2254.000000 europe 1
vw dasher (diesel) 43.400000 48.000000 2335.000000 europe 1
pickup 44.000000 52.000000 2130.000000 europe 1
检查pandas.DataFrame.groupby+pandas.DataFrame.sum
导入pandas作为pd导入numpy作为np汽车=[['Ford',15500.0,'crossover',68,2.5,'Gas','yes',2010,'Kuga','full'],['Mercedes-Benz',20500.0,'sedan 173,1.8,'Gas',yes',2011,'E-Class',rear'],['Mercedes Benz',20500.0,'Other 173,1.8,'Gas',2011,'E-Class',rear'],['Ford',15500.0,“Other”,“68,2.5,'Gas','yes',2010,'Kuga','full']]car_sales=pd.DataFrame(汽车,列=['car','price','body','miliners','engV','engType','registration','year','model','drive'])
这是我的数据框架,我想在汽车旁边创建一个新的列,名为car1,它将包括大众、奔驰、宝马、丰田、VAZ、雷诺、奥迪、欧宝、斯柯达、日产和77个剩余值,其他人我仍然不理解你的问题。你能用输入和期望输出的最小示例更新问题吗MPE是一种用非常精简的设置来描述问题精神的工具,即仅几行代码。在您的情况下,输入可能是2列和4或5行。我的数据中有一列有87个不同的值(汽车品牌),针对每一个汽车品牌,销售和其他属性在另一列中给出。因此,要将前10个汽车品牌和剩余77个我希望club的值排序在“其他”下,以便在制作图表时,我可以在分析中显示这些前10个汽车品牌(剩余的club在“其他”中)。数据框如下:cars=[[Ford',15500.0,'crossover',68,2.5],'Mercedes',20500.0,'sedan',173,1.8],'Mercedes',26500.0,'crossover',173,2.8],
car\u sales=pd.DataFrame(cars,columns=['car','price','body','milies','engV'))
你还没有正确地描述你的问题。你所说的“十大汽车品牌”是什么意思?“前十大汽车品牌”表示订购。订购是什么?按总销售额、总里程数、车型数量、低消耗量、其他方面?您想如何对汽车进行分组?仅按品牌、品牌和车身,还是什么?分组时,您可以计算各种数字统计数据(例如,“平均”、“最小”、“最大”、“中值”).您希望如何处理非数字列?
df.groupby(['brand', 'model']).agg(desired)
Out[]:
mpg horsepower weight origin n
brand model
Other 23.340052 105.540682 2984.651163 usa 387
chevrolet chevette 30.400000 63.250000 2090.250000 usa 4
peugeot 504 23.550000 83.500000 3022.250000 europe 4
volkswagen type 3 23.000000 54.000000 2254.000000 europe 1
vw dasher (diesel) 43.400000 48.000000 2335.000000 europe 1
pickup 44.000000 52.000000 2130.000000 europe 1