Pandas评估一系列中每一行的情况

2024-09-29 06:23:05 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个这样的数据集:

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天之内,我想把这个保险单添加到结果列表中。在

因此,预期产出将是:

^{pr2}$

因为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()函数来计算当前行是否为“?”(这意味着空数据,即政策没有失效)。但是,此语句似乎只计算是否存在“?”整列中的行,而不是当前行。我需要确定这个,因为如果我比较'?'我得到一个错误的日期值。在

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

谢谢你!在


Tags: 数据inpandasfordatetimeifcheckpolicy
1条回答
网友
1楼 · 发布于 2024-09-29 06:23:05

check.str.contains('?')将返回一个布尔数组,显示哪些条目有“?”在他们身上。否则,您可以考虑只迭代

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

但检查任何匹配项与返回匹配项与遍历所有项并返回匹配项之间实际上没有区别。在

相关问题 更多 >