如何用pandas寻找一些持续增长的数值?

数据结构如下
日期        ID      数据1      数据2
2018-3-8   001      68        199
2018-3-8   002      72        288
2018-3-9   001      71        85  
2018-3-9   002      84        199
....

核心需求其实是从海量的ID中,寻找符合条件的ID。
其实问题可以简化成为“寻找最近3天内有连续增长的ID”

请问如何使用pandas寻找出以下两种情况:

  1. 连续3天【数据1】增长都大于0小于100的ID。
  2. 连续3天【数据2】都增长大于5%的ID
  3. 连续3天【数据1】增长大大于0小于5且【数据2】都增长大于3%的ID
阅读 7.4k
1 个回答
import pandas as pd
df = pd.DataFrame([['2018-3-8', 10],
    ['2018-3-9', 20],
    ['2018-3-10', 30],
    ['2018-3-11', 40],
    ['2018-3-12', 250],
    ['2018-3-13', 260],
    ['2018-3-14', 270],
    ['2018-3-15', 280]], columns=['日期', '数据1'])


def f(df):
    return (df[2] - df[1] < 100) and df[2] > df[1] and (df[1] - df[0] < 100) and df[1] > df[0] #增长大于0小于100

df[pd.rolling_apply(df, window=3, func=f)['数据1'] == True] # 满足条件的日期(展示的是连续三天的最后一天)

判断每个ID是否有连续3天【数据1】增长都大于0小于100的日期吧。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题