Python 熊猫:对组进行排序和在组内进行排序

Python 熊猫:对组进行排序和在组内进行排序,python,pandas,sorting,pandas-groupby,Python,Pandas,Sorting,Pandas Groupby,My dataframedf包含具有EAN、较早和较晚日期、“是”和“否”标签和值的产品 EAN-Unique Date Start Value 3324324 2019-04-30 no 0.11 3324324 2018-06-01 yes 56.03 asd2343 2015-03-23 yes 8.02 asd2343 2015-07-11 no 8.45 Xjkhfsd 19

My dataframe
df
包含具有EAN、较早和较晚日期、“是”和“否”标签和值的产品

EAN-Unique  Date         Start  Value 
3324324     2019-04-30   no      0.11
3324324     2018-06-01   yes    56.03
asd2343     2015-03-23   yes     8.02
asd2343     2015-07-11   no      8.45
Xjkhfsd     1999-04-12   yes    12.33
Xjkhfsd     2001-02-01   no      9.11
5234XAR     2013-12-13   no     15.75
5234XAR     2000-12-13   yes     9.00
3434343     1972-05-23   yes     1.26
3434343     1980-11-01   no      2.77
我想根据以下内容对EAN Unique的组进行排序(例如3324324是一个组,asd2343是一个组等等)

  • 基于较早日期的最低到最高值,以及
  • 从较早日期到较晚日期的每个组内
df
应如下所示:

EAN-Unique  Date         Start  Value 
3434343     1972-05-23   yes     1.26
3434343     1980-11-01   no      2.77
asd2343     2015-03-23   yes     8.02
asd2343     2015-07-11   no      8.45
5234XAR     2000-12-13   yes     9.00
5234XAR     2013-12-13   no     15.75
Xjkhfsd     1999-04-12   yes    12.33
Xjkhfsd     2001-02-01   no      9.11
3324324     2018-06-01   yes    56.03
3324324     2019-04-30   no      0.11
我试图把它分类

df = df.sort_values(by=['EAN-Unique','Date','Value'], ascending=[True,True,True]).reset_index(drop=True)
但它并没有像预期的那样起作用。有人能帮我吗


谢谢

创建一个辅助列
seq
以按起始值存储组订单

group_order = df.sort_values(['Start', 'Value'], ascending=[False, True])['EAN-Unique'].unique()
seq_map =  dict(zip(group_order, range(len(group_order))))
df['seq'] = df['EAN-Unique'].map(seq_map)
df.sort_values(['seq', 'Date'], inplace=True)
print(df)

创建一个辅助列
seq
,以按起始值存储组订单

group_order = df.sort_values(['Start', 'Value'], ascending=[False, True])['EAN-Unique'].unique()
seq_map =  dict(zip(group_order, range(len(group_order))))
df['seq'] = df['EAN-Unique'].map(seq_map)
df.sort_values(['seq', 'Date'], inplace=True)
print(df)

为什么
df.sort_values(by='EAN-Unique')
不起作用?为什么343排在第一位?因为343的值是所有值中最低的(最早的日期)。为什么asd2343排在第二位?因为asd2343的值是所有值中第二低的(最早的日期)。5234XAR排在第三位,因为它的早期数据值是所有数据中最低的三分之一。Xjkhfsd排在第四位,因为它的早期价值是所有价值中最低的四分之一。3324324排在第五位,因为它的较早日期的值最高。为什么
df.sort_values(by='EAN-Unique')
不起作用?为什么34343排在第一位?因为3434343的值最低(最早的日期)。那么为什么asd2343排在第二位?因为asd2343的较早日期的值排在第二位。5234XAR排在第三位,因为它的早期数据值是所有数据中最低的三分之一。Xjkhfsd排在第四位,因为它的早期价值是所有价值中最低的四分之一。3324324排在第五位,因为它的早期价值最高。