要比较的功能:
def get_td(first_date_str, second_date_str):
tdelta = datetime.datetime.strptime(first_date_str, "%Y-%m-%d") - datetime.datetime.strptime(second_date_str, "%Y-%m-%d")
return tdelta.days
diff = filtered
for index, row in diff.iterrows():
diff['diffirent_in_days'] = get_td(row.date, row.shift(1).date)
问题是row.shift(1).date总是返回nan并且出现TypeError
有什么想法吗?
我已经尝试过pandas.apply函数,但是它仅适用于单个参数函数,而不适用于两个。
数据帧中的一行:
2018-07-26,+29,753,suncl,,С 4м/с,w0,+21,753,sunc,,С 4м/с,w0
答案 0 :(得分:1)
很难说,但我认为您想将DataFrame列作为第一个参数传递,并将同一列作为第二个参数传递。这是一个玩具示例。
>>> df
Col1 Col2 Col3
0 10 13 17
1 20 23 27
2 15 18 22
3 30 33 37
4 45 48 52
>>> def get_td(first_date_str, second_date_str):
return first_date_str - second_date_str
>>> get_td(df['Col1'], df['Col1'].shift(1))
0 NaN
1 10.0
2 -5.0
3 15.0
4 15.0
Name: Col1, dtype: float64
>>>
另一个更像您的示例
>>> df
date
0 2011-01-01
1 2011-01-02
2 2011-01-03
3 2011-01-04
4 2011-01-05
5 2011-01-06
>>> def get_td(first,second):
... return pd.to_datetime(first) - pd.to_datetime(second)
>>> get_td(df['date'],df['date'].shift(1))
0 NaT
1 1 days
2 1 days
3 1 days
4 1 days
5 1 days
Name: date, dtype: timedelta64[ns]
>>>