gpt4 book ai didi

python - 按组运行重复值的计数

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

我是 Pandas 的新手并被卡住了,感谢任何帮助。
我有以下数据集:

pd.DataFrame(np.array([[1,1,320], [1,1,320], [1,1,320], [1,1,320], [1,1,319], [1,1,319], [1,1,319], [1,1,319], [1,2,319], [1,2,319], [1,2,319]]), columns = ['PortID', 'FuelGroupID', 'Price'])

PortID FuelGroupID Price
0 1 1 320
1 1 1 320
2 1 1 320
3 1 1 320
4 1 1 319
5 1 1 319
6 1 1 319
7 1 1 319
8 1 2 319
9 1 2 319
10 1 2 319
对于每个 PortID 和 FuelGroupID,我正在尝试对重复值进行运行计数 - 如果值发生变化,计数应该中断。
我已经能够通过使用以下代码实现计数:
df.groupby((df['Price'] != df['Price'].shift(1)).cumsum()).cumcount()
但是,这将逻辑应用于整个数据集,而我希望为 PortID 和 FuelGroupID 的每个新组合重置计数
所以预期的输出应该是
    PortID  FuelGroupID  Price Count
0 1 1 320 0
1 1 1 320 1
2 1 1 320 2
3 1 1 320 3
4 1 1 319 0
5 1 1 319 1
6 1 1 319 2
7 1 1 319 3
8 1 2 319 0
9 1 2 319 1
10 1 2 319 2
非常感谢您的帮助

最佳答案

您可以使用 df.ne np.not_equal 然后使用 pd.Series.any pd.Series.cumsum 这里。

s = df.ne(df.shift()).any(axis=1).cumsum()
# s = np.not_equal(df, df.shift()).any(axis=1).cumsum()
df['Count'] = s.groupby(s).cumcount()

PortID FuelGroupID Price Count
0 1 1 320 0
1 1 1 320 1
2 1 1 320 2
3 1 1 320 3
4 1 1 319 0
5 1 1 319 1
6 1 1 319 2
7 1 1 319 3
8 1 2 319 0
9 1 2 319 1
10 1 2 319 2

关于python - 按组运行重复值的计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64560794/

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