熊猫日期条件计算

时间:2016-08-03 20:28:30

标签: python datetime pandas conditional

我正在尝试根据计算两个事件之间的时间的条件语句在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提出的问题为基础......但我没有取得多大成功。任何帮助表示赞赏!

2 个答案:

答案 0 :(得分: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所需的单个布尔值。你仍然希望立即在整个系列中运行它。我希望我已经给你了一些可以解决问题的方法。

答案 1 :(得分:1)

这样做:

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

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

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