【问题标题】:Get date from most recent ID with corresponding Boolean-Updated2x从具有相应 Boolean-Updated2x 的最新 ID 中获取日期
【发布时间】:2020-01-02 02:23:52
【问题描述】:

我正在尝试查找具有相应 True 值的最新 ID 的相应日期

我已使用 df.id.rolling 在我的日期范围窗口中找到我想要的重复项。我只需要确定重复项与最近出现的重复项之间的距离。

这就是我的起始 df 的样子

df_input:
date        id    duplicate   
1/10/18     1        true         
1/12/18     2        true         
1/20/18     1        false         
1/31/18     1        false         

这就是我想要达到的目标

df_output:
date        id    duplicate   most_recent
1/10/18     1        true         Nan
1/12/18     2        true         Nan
1/20/18     1        false        1/10/18 
1/31/18     1        false        1/10/18 

任何提示都有帮助!

编辑:~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~

感谢您的提示,但这似乎没有找到最近的实例,只有系列中的第一个实例返回第一个事件:

         date  id  duplicate most_recent
   0  1/10/18   1       True         NaN
   1  1/12/18   2       True         NaN
   2  1/20/18   1      False     1/10/18
   3  1/31/18   1      False     1/10/18
   4  2/1/18    1      True          Nan
   5  2/8/18    1      False      1/10/18

我正在寻找:

       date  id  duplicate most_recent
   0  1/10/18   1      True         NaN
   1  1/12/18   2      True         NaN
   2  1/20/18   1      False     1/10/18
   3  1/31/18   1      False     1/10/18
   4  2/1/18    1      True          Nan
   5  2/8/18    1      False     2/1/18

感谢您的帮助,我认为我没有完全意识到或完全解释我的问题。 更新了~~~~~~

提供的编码有效,所以也许我应该重新发布,但我需要能够找到最新的并附加一列,然后我需要能够根据 If + For 循环中的条件再次找到它陈述。代码示例见下文

list2 = []

df.loc[~df.duplicates,'most_recent']=df['date'].where(df.duplicates).groupby(df['id']).ffill()
for index, row in df.iterrows():
 
  dup = row['duplicates']
  date = row['date']
  ndate = row['most_recent']
  d1 = date - ndate
  
  if d1 > timedelta(days= 14):
      x= True
      
      if x == True:
          list2.append(x)     
  else:  
      list2.append(dup)
  df.loc[~df.duplicates,'most_recent']=df['date'].where(df.duplicates).groupby(df['id']).ffill()

示例输出:

        date  id  duplicate most_recent
  0  1/10/18   1      True         NaN
  1  1/12/18   2      True         NaN
  2  1/20/18   1      False     1/10/18
  3  1/31/18   1      False     1/10/18
  4  2/1/18    1      True          Nan
  5  2/8/18    1      False     2/1/18

一些代码

        date  id  duplicate most_recent
  0  1/10/18   1      True         NaN
  1  1/12/18   2      True         NaN
  2  1/20/18   1      False     1/10/18
  3  1/31/18   1      False     1/10/18
  4  2/1/18    1      True          Nan
  5  2/8/18    1      True      2/1/18

【问题讨论】:

    标签: python-3.x pandas datetime merge


    【解决方案1】:

    我会用ffill做什么

    df.loc[~df.duplicate,'most_recent']=df['date'].where(df.duplicate).groupby(df['id']).ffill()
    df
    Out[740]: 
          date  id  duplicate most_recent
    0  1/10/18   1       True         NaN
    1  1/12/18   2       True         NaN
    2  1/20/18   1      False     1/10/18
    3  1/31/18   1      False     1/10/18
    

    【讨论】:

    • 谢谢!但是,这发现系列中的第一个事件不是最近的,我编辑了我的原始帖子以突出我的意思
    • 谢谢,这回答了原来的问题,所以我打了勾。不过,我仍然在为这个问题苦苦挣扎,因为我不断需要根据 for 循环中的 If 语句重新分组。我更新了帖子
    【解决方案2】:

    为您的代码使用 transform 函数

    df.loc[df.duplicate,'column_name_you are looking for ']=df.groupby('id').date.transform('first')
    

    df

    【讨论】:

    • 谢谢,但这似乎发现第一次出现不是最近的,请参阅编辑下方的更新帖子
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-02-25
    • 1970-01-01
    • 2016-02-23
    • 1970-01-01
    • 2020-06-16
    • 2015-08-26
    • 1970-01-01
    相关资源
    最近更新 更多