熊猫:根据层次结构删除重复的值

时间:2020-01-29 09:38:01

标签: python pandas

我正在尝试删除产品编号的所有重复项,并根据预定义的层次结构仅保留最高的记录,其值在单独的列中。

层次结构如下所示:

A1
A2
A3
A4
A5 

下面是整个DataFrame df的摘要。

product_num   price_category  
101           A1              
101           A3               
202           A2              
202           A4              
302           A2               
302           A5
303           A5
303           A1
304           A4
304           A3

我希望达到的期望输出如下所示。

 product_num   price_category  
    101           A1              
    202           A2              
    302           A2               
    303           A1      
    304           A3

2 个答案:

答案 0 :(得分:2)

将列price_category转换为ordered categoricals,因此如果将DataFrame.sort_valuesDataFrame.drop_duplicates一起使用,则按层次结构删除重复项:

c = ['A1','A2','A3','A4','A5']
df['price_category'] = pd.Categorical(df['price_category'], ordered=True, categories=c)

df = df.sort_values(['product_num','price_category']).drop_duplicates('product_num')
print (df)
   product_num price_category
0          101             A1
2          202             A2
4          302             A2
7          303             A1
9          304             A3

答案 1 :(得分:0)

这是2行答案

df = df.sort_values(by = 'price_category')
df = df.drop_duplicates('product_num')

第一行将输出

sorted dataframe

现在删除了price_num列中的重复项,给出了所需的结果。