熊猫对重复的列值进行排序

时间:2019-09-20 22:41:04

标签: python pandas

如何对DataFrame进行排序,以便将列的重复行值“添加”到它们首先“出现”的行? 例如,我原始的DataFrame如下所示:

In [3]: df
Out[3]: 
    A  B
0  r1  0
1  r3  3
2  r3  5
3  r1  3
4  r3  6
5  r4  2
6  r2  1
7  r1  7

我想对它进行以下排序

In [3]: df
Out[3]: 
    A  B
0  r1  0
1  r1  3
2  r1  7
3  r3  3
4  r3  5
5  r3  6
6  r4  2
7  r2  7

我已经尝试过df.groupby('A'),但是并没有给我想要的结果

2 个答案:

答案 0 :(得分:0)

您可以创建一个字典,将A列映射到第一次出现时的索引,然后使用它对df进行排序:

d = {}
c = 0
for i in df.itertuples():
    if i.A not in d:
        d.update({i.A: c})
        c += 1

df['m'] = df.A.map(d)
df = df.sort_values(by='m').drop('m', axis=1)

    A  B
0  r1  0
3  r1  3
7  r1  7
1  r3  3
2  r3  5
4  r3  6
5  r4  2
6  r2  1

答案 1 :(得分:0)

您可以像这样使用分组方式

df.groupby("A").apply(lambda x: x[["B"]].copy()).reset_index(level=0)

但如果您不想对组进行某些操作,则可以进行简单排序

df.sort_values("A")
## or 
df.sort_values(["A", "B"])