熊猫 - 评估系列中每一行的条件

时间:2017-02-22 22:10:09

标签: python pandas

我有这样的数据集:

Policy | Customer | Employee | CoveragDate | LapseDate
123    | 1234     | 1234     | 2011-06-01  | 2015-12-31
124    | 1234     | 1234     | 2016-01-01  | ?
125    | 1234     | 1234     | 2011-06-01  | 2012-01-01
124    | 5678     | 5555     | 2014-01-01  | ?

我试图为每个客户的每个员工迭代每个政策(客户可以有很多员工,员工可以有多个政策),并将涵盖日期与特定员工的失效日期进行比较。如果涵盖日期和失效日期在5天之内,我想将该政策添加到结果列表中。

因此,预期的输出将是:

Policy | Customer | Employee
123    | 1234     | 1234

因为政策123的失效日期是在保单124所涵盖的日期之后的5天内。

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

import pandas
import datetime
#Pull in data from query

wd = pandas.read_csv('DATA')
wd=wd.set_index('Policy#')
wd = wd.rename(columns={'Policy#':'Policy'})


Resultlist=[]
for EMPID in wd.groupby(['EMPID', 'Customer']):
    for Policy in wd.groupby(['EMPID','Customer']):
        EffDate = pandas.to_datetime(wd['CoverageEffDate'])
        for Policy in wd.groupby(['EMPID','Customer']):
            check=wd['LapseDate'].astype(str)
            if check.any() =='?': #here lies the problem - it's evaluating if ANY of the items ='?'
                print(check)
                continue
            else:
                LapseDate = pandas.to_datetime(wd['LapseDate']) + datetime.timedelta(days=5)
                if EffDate < LapseDate:
                    Resultlist.append(wd['Policy','Customer'])


print(Resultlist)

我试图使用pandas .any()函数来评估当前行是否为&#39;?&#39; (这意味着空数据,即政策没有失效)。但是,似乎这个陈述只是评估是否存在&#39;?&#39;整列中的行,而不是当前行。我需要确定这一点,因为如果我比较&#39;?&#39;对于我收到错误的日期的价值。

有没有办法只引用我迭代进行条件检查的行?据我所知,我不能使用pandas apply function技术,因为我需要将每位员工的政策数据与他们持有的任何其他政策进行比较。

谢谢!

1 个答案:

答案 0 :(得分:0)

check.str.contains('?')会返回一个布尔数组,显示哪些条目有'?'在他们中。否则你可能会考虑只是迭代,即

check=wd['LapseDate'].astype(str)
for row in check:
    if row == '?':
        print(check)

但是在检查任何匹配和返回之间确实没有区别,如果有匹配并且迭代全部并且如果匹配则返回。