gpt4 book ai didi

python - 使用 Pandas 仅获取每组的第一行和最后一行

转载 作者:太空宇宙 更新时间:2023-11-03 13:57:13 25 4
gpt4 key购买 nike

我是 python 新手。我有一个巨大的 dataframe,其中包含数百万行和 id。我的数据如下所示:

Time    ID  X   Y
8:00 A 23 100
9:00 B 24 110
10:00 B 25 120
11:00 C 26 130
12:00 C 27 140
13:00 A 28 150
14:00 A 29 160
15:00 D 30 170
16:00 C 31 180
17:00 B 32 190
18:00 A 33 200
19:00 C 34 210
20:00 A 35 220
21:00 B 36 230
22:00 C 37 240
23:00 B 38 250

我想按 id 和 time 对数据进行排序。我想要的预期结果是这样的”

Time    ID  X   Y
8:00 A 23 100
13:00 A 28 150
14:00 A 29 160
18:00 A 33 200
20:00 A 35 220
9:00 B 24 110
10:00 B 25 120
17:00 B 32 190
21:00 B 36 230
23:00 B 38 250
11:00 C 26 130
12:00 C 27 140
16:00 C 31 180
19:00 C 34 210
22:00 C 37 240
15:00 D 30 170

并且我只想选择 ID 的“第一个和最后一个”并删除其余部分。预期结果如下所示:

Time    ID  X   Y
8:00 A 23 100
20:00 A 35 220
9:00 B 24 110
23:00 B 38 250
11:00 C 26 130
22:00 C 37 240
15:00 D 30 170

如何在 Pandas 中做到这一点?谢谢你的建议

最佳答案

使用 groupby , 找到 headtail对于每个组,concat两个。

g = df.groupby('ID')

(pd.concat([g.head(1), g.tail(1)])
.drop_duplicates()
.sort_values('ID')
.reset_index(drop=True))

Time ID X Y
0 8:00 A 23 100
1 20:00 A 35 220
2 9:00 B 24 110
3 23:00 B 38 250
4 11:00 C 26 130
5 22:00 C 37 240
6 15:00 D 30 170

如果你能保证每个 ID 组有 至少 两行,drop_duplicates不需要调用。


详情

g.head(1)

Time ID X Y
0 8:00 A 23 100
1 9:00 B 24 110
3 11:00 C 26 130
7 15:00 D 30 170

g.tail(1)

Time ID X Y
7 15:00 D 30 170
12 20:00 A 35 220
14 22:00 C 37 240
15 23:00 B 38 250

pd.concat([g.head(1), g.tail(1)])

Time ID X Y
0 8:00 A 23 100
1 9:00 B 24 110
3 11:00 C 26 130
7 15:00 D 30 170
7 15:00 D 30 170
12 20:00 A 35 220
14 22:00 C 37 240
15 23:00 B 38 250

关于python - 使用 Pandas 仅获取每组的第一行和最后一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53927414/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com