Python 如何基于较低的频率删除重复项

Python 如何基于较低的频率删除重复项,python,pandas,Python,Pandas,我有一张像这样的桌子 我希望能够保留具有最高频率的品牌的ID。例如,在奥迪的情况下,两个ID具有相同的频率,所以只保留一个。对于梅赛德斯-奔驰,保留后一款,因为它的频率为7 这是我的数据帧: {'Brand': {0: 'audi', 1: 'audi', 2: 'bmw', 3: 'dacia', 4: 'fiat', 5: 'ford', 6: 'ford', 7: 'honda', 8: 'honda', 9: 'hyundai', 10: '

我有一张像这样的桌子

我希望能够保留具有最高频率的品牌的ID。例如,在奥迪的情况下,两个ID具有相同的频率,所以只保留一个。对于梅赛德斯-奔驰,保留后一款,因为它的频率为7

这是我的数据帧:

{'Brand': 
 {0: 'audi',
  1: 'audi',
  2: 'bmw',
  3: 'dacia',
  4: 'fiat',
  5: 'ford',
  6: 'ford',
  7: 'honda',
  8: 'honda',
  9: 'hyundai',
  10: 'kia',
  11: 'mercedes-benz',
  12: 'mercedes-benz',
  13: 'nissan',
  14: 'nissan',
  15: 'opel',
  16: 'renault',
  17: 'renault',
  18: 'renault',
  19: 'renault',
  20: 'toyota',
  21: 'toyota',
  22: 'volvo',
  23: 'vw',
  24: 'vw',
  25: 'vw',
  26: 'vw'},
 'id': 
 {0: 'audi_a4_dynamic_2016_otomatik',
  1: 'audi_a6_standart_2015_otomatik',
  2: 'bmw_5 series_executive_2016_otomatik',
  3: 'dacia_duster_laureate_2017_manuel',
  4: 'fiat_egea_easy_2017_manuel',
  5: 'ford_focus_trend x_2015_manuel',
  6: 'ford_focus_trend x_2015_otomatik',
  7: 'honda_civic_eco elegance_2017_otomatik',
  8: 'honda_cr-v_executive_2018_otomatik',
  9: 'hyundai_tucson_elite plus_2017_otomatik',
  10: 'kia_sportage_concept plus_2015_otomatik',
  11: 'mercedes-benz_c-class_amg_2016_otomatik',
  12: 'mercedes-benz_e-class_edition e_2015_otomatik',
  13: 'nissan_qashqai_black edition_2014_manuel',
  14: 'nissan_qashqai_sky pack_2015_otomatik',
  15: 'opel_astra_edition_2016_manuel',
  16: 'renault_clio_joy_2016_manuel',
  17: 'renault_kadjar_icon_2015_otomatik',
  18: 'renault_kadjar_icon_2016_otomatik',
  19: 'renault_mégane_touch_2017_otomatik',
  20: 'toyota_corolla_touch_2015_otomatik',
  21: 'toyota_corolla_touch_2016_otomatik',
  22: 'volvo_s60_advance_2018_otomatik',
  23: 'vw_jetta_comfortline_2013_otomatik',
  24: 'vw_passat_highline_2017_otomatik',
  25: 'vw_tiguan_sport&style_2012_manuel',
  26: 'vw_tiguan_sport&style_2013_manuel'},
 'freq': {0: 4,
  1: 4,
  2: 7,
  3: 4,
  4: 4,
  5: 4,
  6: 4,
  7: 4,
  8: 4,
  9: 4,
  10: 4,
  11: 4,
  12: 7,
  13: 4,
  14: 4,
  15: 4,
  16: 4,
  17: 4,
  18: 4,
  19: 4,
  20: 4,
  21: 4,
  22: 4,
  23: 4,
  24: 7,
  25: 4,
  26: 4}}
编辑:尝试了其中一个答案,得到了额外的标题级别

您需要
pandas.groupby
品牌
,然后根据最大频率进行聚合

像这样的方法应该会奏效:

df.groupby('Brand')[['id', 'freq']].agg({'freq': 'max'})

要获得结果,请运行:

result = df.groupby('Brand', as_index=False).apply(
    lambda grp: grp[grp.freq == grp.freq.max()].iloc[0])

这可能是重复的,当然是重复的,但我认为有一个更好的。在这种情况下,我只是对删除的重复项进行排序:
df.sort\u values('freq')。删除重复项('Brand',keep='last')
@ALollz不知道我为什么没有想到它。最简单的解决方案。感谢我发布的dup在那里的某个地方有这样的解决方案,它最终会有所不同,这取决于您想要的是单个值还是所有值的最大值,但是
drop\u dup
只确保了一个。这一个有一个小问题。请再次检查问题,我已对其进行了编辑