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
我按照seq
、event_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
有没有一种方法可以保留索引顺序并获得所述结果?
groupby
中使用sort=False
。 - user3483203df.groupby(['seq', 'event_no'], sort=False).points_no.sum().reset_index()
这段代码的作用是按照'df'数据框中'seq'和'event_no'两列的值进行分组,然后对每组内的'points_no'列求和,并将结果存储为一个新的数据框并返回。sort=False
参数表示不对分组结果进行排序。 - user3483203