Python 处理dataframe列中的大量不同值

Python 处理dataframe列中的大量不同值,python,pandas,Python,Pandas,python新手,使用python进入数据分析领域。 我正在处理实践数据,其中一列有87个不同的值,另一列有888个不同的值,我想删除后一列。我只是不明白如何处理这些专栏。我是将这些列分组还是删除这些列。如果我是一个团队,那我该怎么做!?非常感谢你的想法@托比·佩蒂@Vaishali 例: 将熊猫作为pd导入 将颠簸导入为np print(“汽车不同条目的计数:”,len(设置(汽车销售['car']))) 打印(“汽车的不同条目:”,设置(汽车销售['car']) car的不同条目计数:87

python新手,使用python进入数据分析领域。 我正在处理实践数据,其中一列有87个不同的值,另一列有888个不同的值,我想删除后一列。我只是不明白如何处理这些专栏。我是将这些列分组还是删除这些列。如果我是一个团队,那我该怎么做!?非常感谢你的想法@托比·佩蒂@Vaishali

例:

将熊猫作为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
    
    根据maximum
    acceleration
    (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