2017-02-22 33 views
-1

我有一個這樣的數據集:大熊貓 - 評估的條件進行了一系列的每一行

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) 

我試圖用大熊貓.ANY()函數計算,如果當前行是(這意味着空數據,即策略沒有失效)。然而,看起來這個陳述只是評估是否有'?'行在整個列中,而不是當前行。我需要確定這一點,因爲如果我比較'?'價值與日期我得到一個錯誤。

有引用剛剛我在迭代的條件檢查該行的方法嗎?據我所知,我不能使用熊貓應用功能技術,因爲我需要將每位員工的政策數據與他們持有的任何其他政策進行比較。

謝謝!

回答

0

check.str.contains('?')將返回一個布爾陣列顯示哪些條目有一個「?」在他們中。否則,你可能會考慮剛剛經歷即

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

迭代,但有真正檢查任何比賽和返回,如果有一個匹配,並通過所有迭代並返回,如果有一個比賽沒有區別。