我有一个像这样的数据框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))
有没有更好的方法呢?
答案 0 :(得分:1)
答案 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