我有2个数据框,一个有Date列,另一个有2个Dates列。两者都有相同的索引,即ID。
我的第一个问题是确定我是否正确,如果我想在两个数据帧上进行计算,那么具有相同索引的行将一起计算?
我的第二个问题是,我想区分df1中的日期和df2的其中一个日期,如下所示:
DF1:
Date1
L-22 2015-03-12
L-15 2016-02-26
DF2:
Date2 Date3
L-15 2016-01-11 NaT
L-22 NaT 2017-01-08
我做了类似这样的事情,它给出了错误,('NaTType'对象没有属性'notnull')
for i in df1.index:
if df2['Date2'].ix[i].notnull():
df1['Days_diff'] = df2['Date2'].sub(df1(train['Date1'], axis=0))
elif df2['Date3'].ix[i].notnull():
df1['Days_diff'] =df3['Date3'].sub(df1(train['Date1'], axis=0))
有什么想法吗?谢谢!
答案 0 :(得分:1)
我认为您需要combine_first
来替换NaN
列之间的值:
dates = df2.Date2.combine_first(df2.Date3)
#alternative solution
#dates = df2.Date2.fillna(df2.Date3)
print (dates)
L-15 2016-01-11
L-22 2017-01-08
Name: Date2, dtype: datetime64[ns]
然后减去值:
df1['Days_diff'] = dates.sub(df1['Date1'], axis=0)
print (df1)
Date1 Days_diff
L-22 2015-03-12 668 days
L-15 2016-02-26 -46 days
另一个解决方案是使用conditions
,但似乎输出相同:
date2 = df2['Date2'].where(df2['Date2'].notnull()).sub(df1['Date1'], axis=0)
date3 = df2['Date3'].where(df2['Date3'].notnull()).sub(df1['Date1'], axis=0)
print (date2)
L-15 -46 days
L-22 NaT
dtype: timedelta64[ns]
print (date3)
L-15 NaT
L-22 668 days
dtype: timedelta64[ns]
df1['Days_diff'] = date2.combine_first(date3)
print (df1)
Date1 Days_diff
L-22 2015-03-12 668 days
L-15 2016-02-26 -46 days