gpt4 book ai didi

python-3.x - Pandas 计算每月发生的跨行条件

转载 作者:行者123 更新时间:2023-12-04 10:07:49 25 4
gpt4 key购买 nike

我有一个这样的数据框

                              oper_status
2012-01-01 00:26:54.250 0
2012-01-01 12:11:54.250 1
2012-01-01 13:57:54.250 2
2012-01-02 00:16:54.250 0
2012-01-02 14:26:54.250 1
2012-01-02 17:20:54.250 0
2012-01-04 08:21:54.250 0
2012-01-04 15:34:54.250 1
2012-01-04 19:45:54.250 0
2012-01-05 01:00:54.250 0
2012-01-05 12:46:54.250 1
2012-01-05 20:27:54.250 2
(...) (...)

我想计算每个月有多少次我有这种模式的连续值:0,1,2。
我尝试使用 iterrows() 在行上循环,但由于我有一个大数据集,所以速度非常慢。
我也想过使用“diff”,但我想不出一个简单的方法来做到这一点。谢谢

编辑:
预期的输出是这样的
              count
time
2012-03-31 244
2012-04-30 65
2012-05-31 167
2012-06-30 33
2012-07-31 187
... ...
2013-05-31 113
2013-06-30 168
2013-07-31 294
2013-08-31 178
2013-09-30 65

最佳答案

计数序列模式是一个两步过程。首先,为每一行构建一个序列,表示在该行结束的模式:

df['seq'] = df.order_status.astype(str).shift(periods=0) + '-' + 
df.order_status.astype(str).shift(periods=1) + '-' +
df.order_status.astype(str).shift(periods=2)

date order_status seq
0 2012-01-01 00:26:54.250 0 NaN
1 2012-01-01 12:11:54.250 1 NaN
2 2012-01-01 13:57:54.250 2 2-1-0
3 2012-01-02 00:16:54.250 0 0-2-1
4 2012-01-02 14:26:54.250 1 1-0-2
5 2012-01-02 17:20:54.250 0 0-1-0
6 2012-01-04 08:21:54.250 0 0-0-1
7 2012-01-04 15:34:54.250 1 1-0-0
8 2012-01-04 19:45:54.250 0 0-1-0
9 2012-01-05 01:00:54.250 0 0-0-1
10 2012-01-05 12:46:54.250 1 1-0-0
11 2012-01-05 20:27:54.250 2 2-1-0

然后,筛选出正确的序列并聚合到您想要的级别:
df['month'] = df.date.dt.month    
df[df.seq == '2-1-0'].groupby("month").month.count()

month
1 2

根据需要进行更改以处理您希望模式在某个时间段内开始、在那里停止、完全在某个时间段内等的情况...

关于python-3.x - Pandas 计算每月发生的跨行条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61482329/

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