Strptime返回所有pandas DataFrame的行,而不仅仅是一行



我有一个类似的数据集:

Policy | Customer | Employee | CoveredDate | LapseDate
123    | 1234     | 1234     | 2011-06-01  | 2013-01-01
124    | 1234     | 1234     | 2016-01-01  | 2013-01-01
124    | 5678     | 5555     | 2014-01-01  | 2013-01-01

我正在尝试为每个客户的每个员工遍历每个策略(客户可以拥有许多员工,员工可以拥有多个政策),并将覆盖日期与特定员工的失职日期进行比较。如果覆盖的日期和失效日期在5天内,我想将该策略添加到结果列表中。

到目前为止,我已经使用了此代码:

import pandas
import datetime
wd = pandas.read_csv(<<FILE LOCATION>>)
Resultlist=[]
for Customer in wd.groupby(['Employee', 'Customer']):
    for Policy in wd.groupby(['Employee', 'Customer']):
        EffDate = datetime.datetime.strptime(str(wd['CoveredDate']),'%Y-%m-%d')
        for Policy in wd.groupby(['Employee', 'Customer']):
            lapsedate = datetime.datetime.strptime(str(wd['LapseDate']),'%Y-%m-%d') + datetime.timedelta(days=5)
            if effdate < LapseDate:
                Resultlist.append(wd['Policy','Customer'])

我最终会遇到一个错误,而我的dataframe的每个行都作为一个输入,而不仅仅是关注当前的迭代 - 因此,对于上面的示例,我会得到:

ValueError: time data '0    2011-06-01n1    2016-01-01n2    2014-01-01nName:

CoverageFageFate,dtype:对象'不匹配格式'%y-%m-%d'

我不确定为什么它试图吸引每个对象,因为我遵循了其他一些答案的格式,详细介绍了如何通过pandas dataframe迭代 - 如果有人可以帮助我,我非常感谢弄清楚!

iiuc您需要所有记录,其中wd ['lapsedate']&amp;wd ['coveddate']在5天内。

使用pd.to_datetime转换为日期时间格式

wd['LapseDate'] = pd.to_datetime(wd.LapseDate)
wd['CoveredDate'] = pd.to_datetime(wd.CoveredDate)
wd['diff'] = ((wd['LapseDate']-wd['CoveredDate']).dt.days).abs()
print wd[(wd['diff']<366)] # change 365 to 5 

输入

   Policy  Customer  Employee CoveredDate  LapseDate  diff
0     123      1234      1234  2011-06-01 2013-01-01   580
1     124      1234      1234  2016-01-01 2013-01-01  1095
2     124      5678      5555  2014-01-01 2013-01-01   365

输出 - 在这里我过滤了少于366的diff,将其更改为5

  Policy  Customer  Employee CoveredDate  LapseDate  diff
2     124      5678      5555  2014-01-01 2013-01-01   365