首页 > 解决方案 > Python Pandas:根据类别的最高频率更改值

问题描述

我在正在探索的数据集中发现了一个分类错误。

数据框如下所示:

df1 = pd.DataFrame({
                     'product': ['ABRICOTS', 'ABRICOTS', 'ABRICOTS', 'ABRICOTS', 'AILS','AILS', 'ANANAS', 'ANANAS', 'ANANAS','ANANAS','ANANAS','ANANAS','ANANAS'], 
                     'family': ['Fruit','Fruit','Fruit', 'Vegetable', 'Vegetable','Vegetable', 'Fruit', 'Fruit','Fruit','Fruit','Cereal','Cereal','Animal Product']
                    })

在此处输入图像描述

每个产品应该只属于 1 个家庭类别,但使用下面的公式显示我有不同类别的产品:

df1.groupby(['product','family']).size().rename('Freq').reset_index()

在此处输入图像描述

现在我想做的是使用一个公式将每个产品的频率数最低的系列更改为我原始数据框中频率数最高的系列。预期结果如下所示:

在此处输入图像描述

标签: pythonpandasdataframe

解决方案


希望这可以帮助,

df1 = pd.DataFrame({
                     'product': ['ABRICOTS', 'ABRICOTS', 'ABRICOTS', 'ABRICOTS', 'AILS','AILS', 'ANANAS', 'ANANAS', 'ANANAS','ANANAS','ANANAS','ANANAS','ANANAS'], 
                     'family': ['Fruit','Fruit','Fruit', 'Vegetable', 'Vegetable','Vegetable', 'Fruit', 'Fruit','Fruit','Fruit','Cereal','Cereal','Animal Product']
                    })

排序并删除行。

d=df1.groupby(['product','family']).size().rename('Freq').reset_index().\
             sort_values(['product','Freq'],ascending=False).\
             drop_duplicates('product')[['product','family']]\
             .set_index('product')['family'].to_dict()

得到这个字典
在此处输入图像描述

使用地图功能

df1['family'] = df1['product'].map(d)

所需输出
在此处输入图像描述

谢谢。


推荐阅读