熊猫-使用自定义功能比较两行

时间:2020-02-08 14:36:28

标签: python pandas

要比较的功能:

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

1 个答案:

答案 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]
>>>