Pandas在两个`timeseries`列之间编写`if()`条件的方法是什么?

时间:2017-03-05 23:48:26

标签: pandas time-series

我对Pandas Series的天真态度需要一些指导。我有一个Pandas DataFrame 两个连接表。左边的表格为timestamp,标题为Time1,右侧为Time2;我的新DataFrame都有。

在此步骤中,我使用辅助函数datetimeg()比较两个f()列:

df['date_error'] = g(df['Time1'], df['Time2'])

工作助手函数g()比较两个datetime值:

def g(newer,older):
    value = newer > older
    return value

这为我提供了一列(True,False)。当我在辅助函数f()中使用条件时,我收到错误,因为newerolder是Pandas Series

def f(newer,older):
    if newer > older:
        delta = (newer - older) 
    else :
        # arbitrairly large value to maintain col dtype
        delta = datetime.timedelta(minutes=1000)
    return delta

确定。精细。我知道我没有正确解开Pandas系列包装,因为我可以使用以下怪物:

def f(newer,older):
    delta = []
    for (k,v),(k2,v2) in zip(newer.iteritems(), older.iteritems()):
        if v > v2 :
            delta.append(v - v2) 
        else :
            # arbitrairly large value to maintain col dtype
            delta.append(datetime.timedelta(minutes=1000))

    return pd.Series(delta)

Pandas在两个DataFrame列之间的条件是什么?

1 个答案:

答案 0 :(得分:0)

通常where是等同于if的pandas:

df = pd.DataFrame([['1/1/01 11:00', '1/1/01 12:00'], 
                   ['1/1/01 14:00', '1/1/01 13:00']],                  
                       columns = ['Time1', 'Time2']
                  ).apply(pd.to_datetime)

(df.Time1 - df.Time2).where(df.Time1 > df.Time2)

0        NaT
1   01:00:00
dtype: timedelta64[ns]

如果您不想在此列中使用空值,则可以在之后调用fillna(1000),但请注意,此数据类型支持空值NaT(不是时间)。