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

时间:2019-10-06 15:18:55

标签: python pandas dataframe

我在玩耍,试图学习熊猫。目前停留在某一点,

数据-

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

原始数据与其他列相比看起来要复杂得多。这只是简化了该数据的版本。 因此,基本上我想要对Col C的数据进行排序,以获取(Col 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.

我认为可能会有更好的方法。因此,在继续执行循环逻辑之前,请先在这里询问是否有更好的方法。做这样简单的事情看起来很糟糕。

欢迎任何建议或指点。如有任何混淆,请随时发表评论。

2 个答案:

答案 0 :(得分:1)

使用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

答案 1 :(得分:1)

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