条件排序,在熊猫列上使用groupby

时间:2020-10-02 14:01:44

标签: python pandas dataframe pandas-groupby

考虑我有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都不同。
这里的商店数据为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. 如果first_primary中的重复PARTS_NEWfirst_primary中带有最新时间戳,则应以相应的cols(“ SELF-NBR”,“ PARTS_NEW”,等。)

  2. 如果first_primary中的PARTS_NEW仅被计数一次,请确保first_primary为 如果是df

让我知道是否需要更多查询。

1 个答案:

答案 0 :(得分:1)

sort_values尝试argsort + isin

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