我对Pandas Series
的天真态度需要一些指导。我有一个Pandas DataFrame 和两个连接表。左边的表格为timestamp
,标题为Time1
,右侧为Time2
;我的新DataFrame都有。
在此步骤中,我使用辅助函数datetime
和g()
比较两个f()
列:
df['date_error'] = g(df['Time1'], df['Time2'])
工作助手函数g()
比较两个datetime
值:
def g(newer,older):
value = newer > older
return value
这为我提供了一列(True,False)
。当我在辅助函数f()
中使用条件时,我收到错误,因为newer
和older
是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列之间的条件是什么?
答案 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
(不是时间)。