pandas的groupby函数是否不保留顺序?

6

I have the following dataset in pandas:

import pandas as pd

seq = [1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2]
event_no = [5, 5, 5, 6, 6, 6, 4, 4, 4, 3, 3, 3, 1, 1, 1, 2, 2, 2]
points_no = [1, 1, 1, None, None, None, 1, 1, 1, 1, 1, 1, None, None, None, 1, 1, 1]

df = pd.DataFrame({"seq" : seq, "event_no": event_no, "points_no": points_no})

seq event_no    points_no
    0   1   5   1.0
    1   1   5   1.0
    2   1   5   1.0
    3   1   6   NaN
    4   1   6   NaN
    5   1   6   NaN
    6   1   4   1.0
    7   1   4   1.0
    8   1   4   1.0
    9   2   3   1.0
    10  2   3   1.0
    11  2   3   1.0
    12  2   1   NaN
    13  2   1   NaN
    14  2   1   NaN
    15  2   2   1.0
    16  2   2   1.0
    17  2   2   1.0

我按照seqevent_no的顺序进行分组,并对points_no求和...

df2 = df.groupby(['seq', 'event_no']).points_no.sum().reset_index()

下面的输出并没有保留event_no列中数据的原始索引顺序,而是按升序排序:
seq event_no    points_no
0   1   4   3.0
1   1   5   3.0
2   1   6   0.0
3   2   1   0.0
4   2   2   3.0
5   2   3   3.0

我想要的输出结果是这样的:
seq event_no    points_no
0   1   5   3.0
1   1   6   0.0
2   1   4   3.0
3   2   3   3.0
4   2   1   0.0
5   2   2   3.0

有没有一种方法可以保留索引顺序并获得所述结果?

14
你可以在groupby中使用sort=False - user3483203
那怎么样?您能举个例子吗? - Khalil Al Hooti
5
df.groupby(['seq', 'event_no'], sort=False).points_no.sum().reset_index() 这段代码的作用是按照'df'数据框中'seq'和'event_no'两列的值进行分组,然后对每组内的'points_no'列求和,并将结果存储为一个新的数据框并返回。sort=False参数表示不对分组结果进行排序。 - user3483203
1个回答

7

使用参数 sort=False

df.groupby(['seq', 'event_no'], sort=False).points_no.sum().reset_index()

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接