Python 熊猫:对组进行排序和在组内进行排序
My dataframePython 熊猫:对组进行排序和在组内进行排序,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
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排在第五位,因为它的早期价值最高。