如何使用groupby在python pandas中按条件递增

我有来自两组 A 和 B 的数据。任务是监控变化,如果变化(Leap)大于 4,则 Stage 设置为高 1。数据是有序的(时间序列)。


import pandas as pd


df = pd.DataFrame({'Group': ['A', 'A', 'A', 'A', 'A', 'A', 'B', 'B', 'B', 'B', 'B', 'B'],

                    'Leap': [1, 5, 1, 1, 5, 1, 1, 3, 5, 5, 1, 1]})


# First set Stage to 1 for all:

df['Stage'] = 1


# Function to find first leap -> set Stage to two.

def setStage2(df):

    df.loc[df['Leap'] > 4, 'Stage'] = 2

    return df


# Apply function by group:

df.groupby('Group').apply(setStage2)

http://img.mukewang.com/629f192b000177aa03610714.jpg

这是我能走多远。阶段应该是增量的:在阶段 2 上一次,不会回到阶段 1。结果应该是这样的:

http://img2.mukewang.com/629f19370001103e03520725.jpg

那么如何填充Stage呢?



holdtom
浏览 182回答 1
1回答

芜湖不芜

这是一种结合groupby和的解决方案transform。import pandas as pddf = pd.DataFrame({    'Group': ['A', 'A', 'A', 'A', 'A', 'A', 'B', 'B', 'B', 'B', 'B', 'B'],    'Leap': [1, 5, 1, 1, 5, 1, 1, 3, 5, 5, 1, 1]})df["Stage"] = df.groupby("Group").Leap.transform(lambda x: (x > 4).cumsum()) + 1在这种情况下,您也可以使用apply代替。transform
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python