Pandas:根据列的值对行进行排序

问题描述 投票:2回答:2

我有一个像这样的数据帧df

ID    NAME    AGE
-----------------
M43   ab      32
M32   df      12
M54   gh      34
M43   ab      98
M43   ab      36
M43   cd      32
M32   cd      39
M43   ab      67

我需要根据ID列对行进行排序。 输出df_grouped应如下所示:

ID    NAME    AGE
-----------------
M43   ab      32
M43   ab      98
M43   ab      36
M43   cd      32
M43   ab      67
M32   df      12
M32   cd      39
M54   gh      34

我尝试过类似的东西:

df_grouped = df.group_by(df.ID)

for id in list(df.ID.unique()):
   grouped_df_list.append(df_grouped.get_group(id))

有没有更好的方法来做到这一点?

python python-3.x pandas
2个回答
1
投票

您可以使用pd.DataFrame.sort_values按多列排序:

df = df.sort_values(['ID', 'NAME'])

默认情况下,参数ascending设置为True


1
投票

你可以使用pd.factorize将键转换成一个唯一的数字,表示它出现的顺序,然后argsort得到位置索引到你的框架,例如:

鉴于:

     0   1   2
0  M43  ab  32
1  M32  df  12
2  M54  gh  34
3  M43  ab  98
4  M43  ab  36
5  M43  cd  32
6  M32  cd  39
7  M43  ab  67

然后:

new_df = df.loc[pd.factorize(df[0])[0].argsort()]
# might want to consider df.reindex() instead depending...

你得到:

     0   1   2
0  M43  ab  32
3  M43  ab  98
4  M43  ab  36
5  M43  cd  32
7  M43  ab  67
1  M32  df  12
6  M32  cd  39
2  M54  gh  34
© www.soinside.com 2019 - 2024. All rights reserved.