代码之家  ›  专栏  ›  技术社区  ›  daiyue

在另一列上进行排序时如何按列分组?

  •  1
  • daiyue  · 技术社区  · 6 年前

    我有a df ,

       date    amount    code    id
    2018-01-01   50       12      1
    2018-02-03   100      12      1
    2017-12-30   1        13      2
    2017-11-30   2        14      2
    

    我想 groupby id ,而在每个组中,日期也按升序或降序排序,因此我可以执行以下操作,

    grouped = df.groupby('id')
    
    a = np.where(grouped['code'].transform('nunique') == 1, 20, 0)
    b = np.where(grouped['amount'].transform('max') > 100, 20, 0)
    c = np.where(grouped['date'].transform(lambda x: x.diff().dropna().sum()).dt.days < 5, 30, 0)
    
    2 回复  |  直到 6 年前
        1
  •  2
  •   Shaido MadHadders    6 年前

    您可以使用 apply sort_values :

    grouped = df.groupby('id').apply(lambda g: g.sort_values('date', ascending=True))
    
        2
  •  0
  •   Matina G    6 年前

    在前面的回答中,如果希望索引保持原样,可以考虑以下几点: 导入熊猫作为pd

    df = {'a':[1,2,3,0,5], 'b':[2,2,3,2,5], 'c':[22,11,11,42,12]}
    df = pd.DataFrame(df)
    e = (df.groupby(['c','b', 'a']).size()).reset_index()
    e = e[['a', 'b', 'c']]
    e = e.sort_values(['c','a'])
    print(e)