【问题标题】:Pandas: Sort groups and sort within groupPandas:对组进行排序并在组内排序
【发布时间】:2021-04-13 01:50:51
【问题描述】:

我的数据框 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-Uniques 的组(例如 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)

但它没有按预期工作。谁能帮帮我?

谢谢!

【问题讨论】:

  • 为什么df.sort_values(by='EAN-Unique') 不起作用?
  • 为什么 3434343 排在第一位?
  • 因为 3434343 的值最低(对于它的最早日期)。
  • 那么为什么 asd2343 排名第二?
  • 因为 asd2343 在其较早的日期中具有第二低的值。而 5234XAR 排名第三,因为它在早期的所有产品中具有三分之一的最低值。 Xjkhfsd 排在第四位,因为它的早期值是第四低的。而 3324324 则排在第五位,因为它在之前的日期中拥有最高的价值。

标签: python pandas sorting pandas-groupby


【解决方案1】:

创建一个辅助列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)
  EAN-Unique        Date Start  Value  seq
8    3434343  1972-05-23   yes   1.26    0
9    3434343  1980-11-01    no   2.77    0
2    asd2343  2015-03-23   yes   8.02    1
3    asd2343  2015-07-11    no   8.45    1
7    5234XAR  2000-12-13   yes   9.00    2
6    5234XAR  2013-12-13    no  15.75    2
4    Xjkhfsd  1999-04-12   yes  12.33    3
5    Xjkhfsd  2001-02-01    no   9.11    3
1    3324324  2018-06-01   yes  56.03    4
0    3324324  2019-04-30    no   0.11    4

【讨论】:

    猜你喜欢
    • 2017-08-27
    • 1970-01-01
    • 2016-07-04
    • 2011-12-26
    • 2014-12-11
    • 2015-03-06
    • 2020-02-22
    • 1970-01-01
    相关资源
    最近更新 更多