Pandas数据集组值按其出现的顺序

时间:2017-04-01 03:03:53

标签: python pandas

我有一个如下所示的数据框:

A

想要创建一个新的数据框,它采用A和B的值并按如下方式排列:

B

2 个答案:

答案 0 :(得分:2)

您需要创建一个新列,该列基本上是A中每个值的子索引。然后你可以对子索引进行排序。

df = pd.DataFrame([[1,40],[1,39],[1,73],
                   [2,58],[2,65],[2,22],
                   [3,9],[3,0],[3,21]], columns=list('AB'))

for a in df.A.unique():
    df.loc[df.index[df.A==a],'x'] = list(range(sum(df.A==a)))

df
# returns:
   A   B  x
0  1  40  0
1  1  39  1
2  1  73  2
3  2  58  0
4  2  65  1
5  2  22  2
6  3   9  0
7  3   0  1
8  3  21  2

df.sort_values(by=['x','A'])[['A','B']]
# returns:
   A   B
0  1  40
3  2  58
6  3   9
1  1  39
4  2  65
7  3   0
2  1  73
5  2  22
8  3  21

答案 1 :(得分:1)

  • groupby'A'并使用cumcount分别为每个分组编制索引
  • 然后argsort并将其传递给iloc以相应地重新排序

<强> 溶液

df.iloc[df.groupby('A').cumcount().argsort()]

   A   B
0  1  40
3  2  58
6  3   9
1  1  39
4  2  65
7  3   0
2  1  73
5  2  22
8  3  21