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

时间:2018-08-09 08:55:38

标签: python python-3.x pandas dataframe pandas-groupby

我有一个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 个答案:

答案 0 :(得分:2)

您可以使用applysort_values对每个组中的数据进行排序:

grouped = df.groupby('id').apply(lambda g: g.sort_values('date', ascending=True))

答案 1 :(得分:0)

除了上一个答案外,如果您希望索引保持原样,则可以考虑以下事项:     将熊猫作为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)