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

时间:2018-02-06 17:32:41

标签: python python-3.x pandas

我有一个像这样的数据框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))

有没有更好的方法呢?

2 个答案:

答案 0 :(得分:1)

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

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

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

答案 1 :(得分: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