gpt4 book ai didi

python - 需要计算 groupby 中 python 数据框中的重复、连续值

转载 作者:行者123 更新时间:2023-12-04 01:09:41 25 4
gpt4 key购买 nike

df = pd.DataFrame({'site':[1,1,1,1,1,1,1,1,1,1], 'parm':[8,8,8,8,8,9,9,9,9,9],
'date':[1,2,3,4,5,1,2,3,4,5], 'obs':[1,1,2,3,3,3,5,5,6,6]})

输出

   site  parm  date  obs
0 1 8 1 1
1 1 8 2 1
2 1 8 3 2
3 1 8 4 3
4 1 8 5 3
5 1 9 1 3
6 1 9 2 5
7 1 9 3 5
8 1 9 4 6
9 1 9 5 6

我想计算“site”和“parm”中重复的、连续的“obs”值。我有这段代码很接近:

df['consecutive'] = df.parm.groupby((df.obs != df.obs.shift()).cumsum()).transform('size')

输出

   site  parm  date  obs  consecutive
0 1 8 1 1 2
1 1 8 2 1 2
2 1 8 3 2 1
3 1 8 4 3 3
4 1 8 5 3 3
5 1 9 1 3 3
6 1 9 2 5 2
7 1 9 3 5 2
8 1 9 4 6 2
9 1 9 5 6 2

它创建了带有计数的新列。差距是当参数从 8 变为 9 时,它在参数 8 计数中包括参数 9。预期的输出是:

   site  parm  date  obs  consecutive
0 1 8 1 1 2
1 1 8 2 1 2
2 1 8 3 2 1
3 1 8 4 3 2
4 1 8 5 3 2
5 1 9 1 3 1
6 1 9 2 5 2
7 1 9 3 5 2
8 1 9 4 6 2
9 1 9 5 6 2

最佳答案

您需要将问题中指示的site,parm 扔进groupby:

df['consecutive'] = (df.groupby([df.obs.ne(df.obs.shift()).cumsum(),
'site', 'parm']
)
['obs'].transform('size')
)

输出:

   site  parm  date  obs  consecutive
0 1 8 1 1 2
1 1 8 2 1 2
2 1 8 3 2 1
3 1 8 4 3 2
4 1 8 5 3 2
5 1 9 1 3 1
6 1 9 2 5 2
7 1 9 3 5 2
8 1 9 4 6 2
9 1 9 5 6 2

关于python - 需要计算 groupby 中 python 数据框中的重复、连续值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65258458/

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