【问题标题】:Pandas Date Conditional CalculationPandas 日期条件计算
【发布时间】:2016-12-09 17:35:48
【问题描述】:

我正在尝试根据计算两个事件之间时间的条件语句在 Pandas 中创建一个列。我能够计算出当天的计算,但是当插入我的条件语句时:

def defect_age(df):
    if df['Status'] == 'R':
        return (pd.to_datetime(df['resolved_on'], errors='coerce') 
            - pd.to_datetime(df['submitted_on'])) / np.timedelta64(1, 'D')
    else:
        return 'null'

然后由列调用:

group_df['Age'] = group_df.apply(defect_age(group_df), axis=0)

我收到以下错误:

ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().

我试图将我的问题建立在HERE...但我没有取得多大成功。任何帮助表示赞赏!

【问题讨论】:

    标签: python datetime pandas conditional


    【解决方案1】:

    这样做:

    group_df['Age'] = group_df.apply(lambda row:defect_age(row), axis=1)
    

    这是因为您希望将函数应用于每一行而不是一次应用于整个数据帧。

    df['Status'] == 'R' 如果应用于数据帧,将给出一个布尔值列表,并且你不能在 if 表达式中放置一个布尔值列表

    【讨论】:

      【解决方案2】:

      尝试使用defect_age的这个定义

      def defect_age(df):
          resolved = pd.to_datetime(df.resolved_on, errors='coerce')
          submitted = pd.to_datetime(df.submitted_on)
          r = (resolved - submitted) / np.timedelta64(1, 'D')
          return np.where(df.Status == 'R', r, np.nan)
      

      错误来自if df['Status'] == 'R'

      这将是一系列布尔值,而不是if 需要的单个布尔值。您仍然想一次在整个系列中运行它。我希望我给了你一些有用的东西。

      【讨论】:

      • 太棒了!谢谢。你的答案正是我想要弄清楚的。我现在要添加更多状态:)
      猜你喜欢
      • 2021-02-18
      • 2021-08-21
      • 1970-01-01
      • 2021-12-31
      • 2019-08-24
      • 2019-04-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多