2017-02-22 24 views
0

我有一個這樣的數據集:Strptime回國的大熊貓數據幀,而不是僅僅一個行中的所有行

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']) 

我最終得到其中strptime功能正在我行數據幀中作爲一個輸入錯誤,而不是隻專注於迭代是目前 - 所以我上面的例子中,我會得到:

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

CoverageEffDate,d類:對象」不匹配格式‘%Y-%間%d’

我不完全確定爲什麼它試圖拉入每個對象,因爲我已經按照SE上其他一些答案的格式詳細說明了如何遍歷熊貓數據框 - 我非常感謝如果有人可以幫助我這個出來!

+0

你能分享預期的產出? – Shijo

回答

2

IIUC你想要所有記錄wd ['LapseDate'] & wd ['CoveredDate']在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,更改到5

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

謝謝,這有助於! 我應該擴大我的目標 - 實際上我想比較每個涵蓋日期與僱員編號的每個其他失效日期 - 因此您會比較保單123和124.如果保單123的保函日期和124的失效日期之間的差異爲5天后,我想將它添加到列表中。 那就是說,pd.to_datetime函數就是我想要解決我所遇到的錯誤 - 謝謝! – funkadellicdan