如何在DataFrame中基于前值大于当前值的条件递增生成序列?
解决DataFrame中当前值小于前值时递增序列的问题
嘿,这个需求我做时序数据处理时经常碰到,用Pandas实现起来简洁又高效!咱们直接上干货:
核心思路是先判断每一行的x值是否比上一行小,然后对这些“下降点”做累加,最后加上初始值1就能得到目标y列了。
步骤1:构造示例数据
先把你给出的示例数据转换成DataFrame,方便测试:
import pandas as pd data = {'x': [1,2,3,4,5,6,1,2,3,4,5,6,7,8,1,2,5]} df = pd.DataFrame(data)
步骤2:生成目标列y
一行代码就能搞定:
df['y'] = (df['x'].diff() < 0).cumsum() + 1
代码逻辑拆解
咱们把这行代码拆解开看,就明白为啥这么好用了:
df['x'].diff():计算每个x值与前一个x值的差值,第一行因为没有前序值,结果是NaN(df['x'].diff() < 0):把差值小于0的位置标记为True(也就是当前x比前一个小的时候),其他位置为False,第一行的NaN会被自动当作False处理.cumsum():对布尔序列做累加,True会被视为1,False视为0,这样每遇到一次x下降,累加值就加1+ 1:因为我们需要y从1开始,而初始累加值是0,加1正好得到起始值
验证结果
运行完代码后打印df,就能得到你想要的结果:
x y 0 1 1 1 2 1 2 3 1 3 4 1 4 5 1 5 6 1 6 1 2 7 2 2 8 3 2 9 4 2 10 5 2 11 6 2 12 7 2 13 8 2 14 1 3 15 2 3 16 5 3
如果你的数据里有缺失值也不用担心,diff()和cumsum()会自动处理NaN,不会影响最终结果~
内容的提问来源于stack exchange,提问作者skinnyas123
相关产品推荐
相关产品推荐

