gpt4 book ai didi

python - Pandas Group By - 按时间和条件分隔

转载 作者:行者123 更新时间:2023-11-28 21:02:59 24 4
gpt4 key购买 nike

我有一个数据框,我试图根据两个条件(时间和标志)创建子 event_id。标志是当人 >= 600 时,创建一个新的子组。

数据看起来像这样:

    | event_id   |  timestamp |  people |
| abc | 12:00 | 1 |
| abc | 12:01 | 3 |
| abc | 12:02 | 5 |
| abc | 12:04 | 600 |
| abc | 12:10 | 4 |
| abc | 12:15 | 7 |
| abc | 12:20 | 1700 |
| abc | 12:30 | 1 |
| abc | 12:31 | 1 |
| xyz | 12:32 | 1 |
| xyz | 12:40 | 750 |
| xyz | 12:50 | 1 |

我想要的结果是这样的:

    | event_id   |  timestamp |  people |  subgroup  |
| abc | 12:00 | 1 | A |
| abc | 12:01 | 3 | A |
| abc | 12:02 | 5 | A |
| abc | 12:04 | 600 | A |
| abc | 12:10 | 4 | B |
| abc | 12:15 | 7 | B |
| abc | 12:20 | 1700 | B |
| abc | 12:30 | 1 | C |
| abc | 12:31 | 1 | C |
| xyz | 12:32 | 1 | A |
| xyz | 12:40 | 750 | A |
| xyz | 12:50 | 1 | B |

因此它需要某种分组依据来说明不同的 event_id(此处为 abc 和 xyz,但在我的真实数据集中有数百万个)。数据是按时间排序的,在确定分组时行顺序很重要 - 两个标志之间的 event_id 的行在一个子组中。每个子组都属于一个 event_id,并且子组的计数重新开始以获得新的 event_id。

很想看到任何/所有的想法,我很困惑,但现在正在玩 lambda 函数。

最佳答案

from string import ascii_uppercase

m = dict(enumerate(ascii_uppercase))

def trickery(x):
c = (x.values >= 600)[::-1].cumsum()[::-1]
return c.max() - c

df.assign(subgroup=df.groupby('event_id').people.transform(trickery).map(m))

event_id timestamp people subgroup
0 abc 12:00 1 A
1 abc 12:01 3 A
2 abc 12:02 5 A
3 abc 12:04 600 A
4 abc 12:10 4 B
5 abc 12:15 7 B
6 abc 12:20 1700 B
7 abc 12:30 1 C
8 abc 12:31 1 C
9 xyz 12:32 1 A
10 xyz 12:40 750 A
11 xyz 12:50 1 B

关于python - Pandas Group By - 按时间和条件分隔,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47213579/

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