如何对给定组中的行进行排序?

2024-09-25 16:23:52 发布

您现在位置:Python中文网/ 问答频道 /正文

我在玩,想学熊猫。目前还一度陷入困境

数据-

A         B          C
---------------------------
1         1          1
1         1          2
1         1          3
2         1          3
2         1          1
2         1          2
1         2          2
1         2          1
1         2          3

我的预期结果是

A         B          C
---------------------------
1         1          1
1         1          2
1         1          3
2         1          1
2         1          2
2         1          3
1         2          1
1         2          2
1         2          3

原始数据与其他列一起看起来非常复杂。这只是数据的简化版本。 所以基本上我想要的是对C列的数据进行排序,在适当的位置对组合的唯一键进行排序(A列和B列)

目前我想做的是

contentIDs = data.B.unique()
for iD in contentIDs:
    slots = data[data.B == iD].A.unique()

    for s in slots:
        slotData = data[(data.A == s) & (data.B ==  iD)]
        sortedData = slotData.sort_values(['A', 'B', 'C'])

    #Loop throug data to get to the index of sorted data and then replace unsorted data with sorted data.

我想也许有更好的办法。所以在我继续我的循环逻辑之前,在这里询问是否有更好的方法。做这种简单的事情看起来很糟糕

欢迎任何建议或指点。如有任何疑问,请随时发表意见


Tags: to数据in版本idfordata原始数据
2条回答

IIUC公司

df.sort_values(['B','A','C'])
   A  B  C
0  1  1  1
1  1  1  2
2  1  1  3
4  2  1  1
5  2  1  2
3  2  1  3
7  1  2  1
6  1  2  2
8  1  2  3

使用GroupBy.apply

df.groupby(['A','B'],sort=False)['C'].apply(lambda x:x.sort_values()).reset_index(level=['A','B'])

   A  B  C
0  1  1  1
1  1  1  2
2  1  1  3
4  2  1  1
5  2  1  2
3  2  1  3
7  1  2  1
6  1  2  2
8  1  2  3

相关问题 更多 >