python-3.x 在pandas中对2列进行排序,同时固定1列

xwbd5t1u  于 2023-06-07  发布在  Python
关注(0)|答案(2)|浏览(88)

我有一个pandas dataframe,看起来像这样:

X    Y        Z
AB  bat     0.51184607
AB  ball    0.45687276
AB  cat     0.5428388
CD  apple   0.89665717
CD  tiger   0.6785901
CD  bench   0.787102
CD  dragon  0.8066087

我想根据Z列的值降序对 Dataframe 进行排序,并相应地获得相应的Y列值,但保持X列不变。因此输出应该如下所示:

X    Y         Z
AB  cat     0.5428388
AB  bat     0.51184607
AB  ball    0.45687276
CD  apple   0.89665717
CD  dragon  0.8066087
CD  bench   0.787102
CD  tiger   0.6785901

我怎样才能在Pandas身上有效地做到这一点呢

i1icjdpr

i1icjdpr1#

你可以做sort_values

df = df.sort_values(['X','Z'],ascending=[True,False])
Out[74]: 
    X       Y         Z
2  AB     cat  0.542839
0  AB     bat  0.511846
1  AB    ball  0.456873
3  CD   apple  0.896657
6  CD  dragon  0.806609
5  CD   bench  0.787102
4  CD   tiger  0.678590
dy1byipe

dy1byipe2#

这个工作,但效率不高:

def sort_cols(df, cols):
    df = df.sort_values(cols)
    return df

new_df = df.groupby('X').apply(sort_cols, cols='Z').reset_index(drop=True)
df = pd.merge(df, new_df, one=df.columns.tolist())

sorting by a custom list in pandas的另一种方式

sorter = df.X.unique()
df.X = df.X.astype('category')
df.X = df.X.cat.set_categories(sorter)
df = df.sort_values(['X', 'Z'])

相关问题