【问题标题】:Conditional sorting, using groupby on columns in pandas条件排序,在 pandas 的列上使用 groupby
【发布时间】:2020-10-02 14:01:44
【问题描述】:

考虑到我有关注 df。

first_primary='N8910-011B0BB' 

dct = {'Store':('19387','19387','19387','19387','19387'),
       'SELF-NBR':('INC1539641','INC1514967','INC1518545','INC1518666','INC1514983'),
       'PARTS_NEW':('N8910-011B0BB','N8910-011B0BB','Q24-FR128043','Q24-FR128043','Q24-FR128042'),
       'date_diff':(1,7,1,1,0),
       'PLACEDAY' :('2020-05-11 18:58:35','2020-05-18 05:25:39','2020-05-12 04:42:29','2020-05-12 02:22:22','2020-05-11 15:20:32')
    }

df = pd.DataFrame(dct)
df['PLACEDAY']= pd.to_datetime(df['PLACEDAY'])

print(df)

    Store   SELF-NBR    PARTS_NEW        date_diff  PLACEDAY
0   19387   INC1539641  N8910-011B0BB       1      2020-05-11 18:58:35
1   19387   INC1514967  N8910-011B0BB       7      2020-05-18 05:25:39
2   19387   INC1518545  Q24-FR128043        1      2020-05-12 04:42:29
3   19387   INC1518666  Q24-FR128043        1      2020-05-12 02:22:22
4   19387   INC1514983  Q24-FR128042        0      2020-05-11 15:20:32

上面的数据框df 是从 for 循环中获得的,并且因每个唯一的 store_id 而异。
这里的数据是 store = 19387,first_primary 也因每个商店而异,但将由 first_primary 标识,如代码中所述

我只想对df 进行条件排序,前提是first_primary 重复多次, 按PLACEDAY 对数据框进行排序(降序),确保first_primary 始终位于顶部。

预期的数据框

    Store   SELF-NBR    PARTS_NEW        date_diff  PLACEDAY
0   19387   INC1514967  N8910-011B0BB       7      2020-05-18 05:25:39
1   19387   INC1539641  N8910-011B0BB       1      2020-05-11 18:58:35
2   19387   INC1518545  Q24-FR128043        1      2020-05-12 04:42:29
3   19387   INC1518666  Q24-FR128043        1      2020-05-12 02:22:22
4   19387   INC1514983  Q24-FR128042        0      2020-05-11 15:20:32

总结:

  1. 如果PARTS_NEWfirst_primary 中重复的first_primary 带有最新的时间戳,则应在顶部,并带有相应的列('SELF-NBR'、'PARTS_NEW' 等。)

  2. 如果PARTS_NEW中的first_primary只计算一次,确保first_primary是 如果df在顶部

如果需要更多查询,请告诉我。

【问题讨论】:

    标签: python pandas dataframe pandas-groupby


    【解决方案1】:

    试试sort_values + argsortisin

    df = df.sort_values('PLACEDAY',ascending=False)
    first_primary='N8910-011B0BB' 
    df = df.iloc[(~df.PARTS_NEW.isin([first_primary])).argsort()]
    df
       Store    SELF-NBR      PARTS_NEW  date_diff            PLACEDAY
    1  19387  INC1514967  N8910-011B0BB          7 2020-05-18 05:25:39
    0  19387  INC1539641  N8910-011B0BB          1 2020-05-11 18:58:35
    2  19387  INC1518545   Q24-FR128043          1 2020-05-12 04:42:29
    3  19387  INC1518666   Q24-FR128043          1 2020-05-12 02:22:22
    4  19387  INC1514983   Q24-FR128042          0 2020-05-11 15:20:32
    

    【讨论】:

      猜你喜欢
      • 2019-06-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-14
      • 1970-01-01
      • 2015-01-17
      • 2013-06-20
      • 2022-01-16
      相关资源
      最近更新 更多