gpt4 book ai didi

python - 有没有办法对 Pandas 中的条件进行计数和重新计数?

转载 作者:行者123 更新时间:2023-12-04 08:02:17 25 4
gpt4 key购买 nike

我想知道一天中一辆车进行了多少次乘车,并为每一次写在新行中的乘车提供一个“乘车计数器”,指示当天乘车的顺序。我创建了一个列,指示骑行是否是一天中的第一天(“Is_first_ride”)。如果是这样,我想创建的名为“#_of_ride”的新列应该从 1 开始计数,如果它是当天的第一次骑行,直到到达当天的下一次骑行。我已经尝试了以下方法:

def counter(first_ride):
counter = 1
while first_ride != 1:
counter += 1
return counter
return 1


df["#_of_ride"] = df.apply (lambda x: counter(x[df["Is_first_ride"]]), axis=1)
但这会返回一个值错误 - 系列是模糊的。
最后,我希望创建如下所示的内容:



日期
Is_first_ride
#_of_ride


福特
20.1.2021
1
1

福特
20.1.2021
0
2

福特
20.1.2021
0
3

福特
20.1.2021
0
4

菲亚特
20.1.2021
1
1

菲亚特
20.1.2021
0
2

菲亚特
20.1.2021
0
3

菲亚特
20.1.2021
0
4

福特
21.1.2021
1
1

福特
21.1.2021
0
2


提前致谢!

最佳答案

我们可以利用cumsum结合 bool 数组。我们使用 bool 数组来制作乘车组,以及乘车计数器。

fr = df['Is_first_ride'].eq(1)
df['nr_of_ride'] = df['Is_first_ride'].ne(1).groupby(fr.cumsum()).cumsum().add(1)
    car       date  Is_first_ride  nr_of_ride
0 Ford 20.1.2021 1 1
1 Ford 20.1.2021 0 2
2 Ford 20.1.2021 0 3
3 Ford 20.1.2021 0 4
4 Fiat 20.1.2021 1 1
5 Fiat 20.1.2021 0 2
6 Fiat 20.1.2021 0 3
7 Fiat 20.1.2021 0 4
8 Ford 21.1.2021 1 1
9 Ford 21.1.2021 0 2

或者我们利用的第二种选择 cumcount (感谢 Shubham)以及 Is_first_ride 的事实已经适合做 cumsum (所以我们跳过 fr = ... )
df['nr_of_ride'] = (
df['Is_first_ride'].ne(1)
.groupby(df['Is_first_ride'].cumsum())
.cumcount().add(1)
)

关于python - 有没有办法对 Pandas 中的条件进行计数和重新计数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66398330/

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