我有一个问题,我需要根据这些状态的日期跟踪患者保险索赔状态的进展。我还需要根据某些条件创建状态计数。
p>首先将日期列转换为
for i in ['New', 'Accepted', 'Denied', 'Pending', 'Expired']:
df[i] = pd.to_datetime(df[i], format="%Y-%m-%dT%H:%M:%S:%f%z")
然后根据您的列条件开发适用的日期范围。在此逻辑中,如果Denied存在,则范围为new——>拒绝,或者如果接受,新的——>已接受,如果未接受,则重新接受——>现在的代码是(alter as per rules):
df['new_range'] = df[['New','Accepted','Denied']].apply (lambda x: pd.date_range(x['New'],x['Denied']).date.tolist() if
pd.notnull(x['Denied']) else
pd.date_range(x['New'],x['Accepted']).date.tolist() if
pd.notnull(x['Accepted']) else
pd.date_range(x['New'],datetime.today()).date.tolist()
,axis=1)
你应该能够对一个组进行筛选,并在df中看到日期范围,如:
df[df['Group']=='A']['new_range']
0 [2021-01-01]
1 [2021-01-01, 2021-01-02, 2021-01-03, 2021-01-0...
2 [2021-02-14]
3 [2021-02-14]
4 [2021-02-14, 2021-02-15, 2021-02-16, 2021-02-1..
然后你可以扩展日期范围和计数分组,以获得每天的新计数,代码如下:
new = pd.to_datetime(df[df['Group']=='A']['new_range'].explode('Date')).reset_index()
newc = new.groupby('new_range').count()
newc
new_range
2021-01-01 2
2021-01-02 1
2021-01-03 1
2021-01-04 1
2021-01-05 1
2021-01-06 1...
同样地,获取被接受、被拒绝的计数,然后在日期上左联接以到达最终表,将na填入0。
通过创建规则来扩展日期范围,然后扩展日期范围和分组来获得计数,您应该能够避免许多昂贵的操作。
我认为这是你想要的,或者可以很容易地修改你的需要:
import pandas as pd
import numpy as np
from datetime import timedelta
from datetime import date
def dateRange(d1,d2):
return [d1 + timedelta(days=x) for x in range((d2-d1).days)]
def addCount(dic,group,dat,cat):
if group not in dic:
dic[group]={}
if dat not in dic[group]:
dic[group][dat]={}
if cat not in dic[group][dat]:
dic[group][dat][cat]=0
dic[group][dat][cat]+=1
df =pd.read_csv("testdf.csv",
parse_dates=["New","Accepted","Denied","Pending", "Expired"])#,
cdic={}
for i,row in df.iterrows():
cid=row["ClaimID"]
dnew=row["New"].date()
dacc=row["Accepted"].date()
dden=row["Denied"].date()
dpen=row["Pending"].date()
dexp=row["Expired"].date()
group=row["Group"]
if not pd.isna(dacc): #Claim has been accepted
if(dnew == dacc):
dacc+=timedelta(days=1)
nend=dacc
addCount(cdic,group,dacc,"acc")
if not pd.isna(dden): # Claim has been denied
if(dnew == dden):
dden+=timedelta(days=1)
if pd.isna(dacc):
nend=dden
addCount(cdic,group,dden,"den")
if not pd.isna(dpen):
addCount(cdic,group,dpen,"pen") # Claim is pending
if not pd.isna(dexp):
addCount(cdic,group,dexp,"exp") # Claim is expired
if pd.isna(dacc) and pd.isna(dden):
nend=date.today()+timedelta(days+1)
for d in dateRange(dnew,nend): # Fill new status until first change
addCount(cdic,group,d,"new")
ndfl=[]
for group in cdic:
for dat in sorted(cdic[group].keys()):
r=cdic[group][dat]
ndfl.append([group,dat,r.get("new",0),r.get("acc",0),
r.get("den",0),r.get("pen",0),r.get("exp",0)])
ndf=pd.DataFrame(ndfl,columns=["Group", "Date","New","Accepted","Denied","Pending","Expired"])
相关内容
- 没有找到相关文章
最新更新
- 如何在WrapPanel中获得元素的坐标?
- 如何检查webpack.config.js中的监视模式?
- 如何创建动态正则表达式生成器?
- ActorReferences作为Akka中其他角色的成员变量
- 我不知道有什么区别
- 文字SQL工作:数组值必须以"{"或维度信息开头
- Go-使函数与外观相似的结构切片一起工作的惯用方法
- 在一个弹出窗口中管理多个输入的焦点
- r语言 - 进行单向方差分析
- 当应用程序保持打开状态时,标识会话超时
- 在cmake中使用PUBLIC/PRIVATE/INTERFACE的例子
- 不能将反射字段强制转换为映射
- return NULL for whois python3
- Sequelize如何将日期格式设置为YYYY-MM-DD HH:mm:ss并将列保持蛇形大小写 &
- 如何从给定字符串中删除字符?(python中的字符串操作)
- WMI wbemtest错误0x80070005访问被拒绝
- 如何从Android应用程序发送数据到Node.js
- 单元格列表与LazyVGrid有时消失
- flutter stripe付款错误尚未初始化付款单
- 在使用@ pip安装需求时,部署到heroku失败
- setTimeout结束后如何填充元素?
- 如何在pandas中插入和填充计算值的行?
- 你如何找到一台PC上的gpu数量?
- 使用client_states作为状态的自定义聚合器
- 带相关函数的Numba提前(AOT)编译
- Azure Function SQL输入绑定在AddAsync上失败
- Net:: HTTP.HTTPS Headers get失败
- 如何清除fileInput数据和相应的对象在R Shiny?
- salesforce获取闪电组件中的帐户id
- 如何使用SQLite设置和访问Shopify会话?
热门标签:
javascript python java c# php android html jquery c++ css ios sql mysql arrays asp.net json python-3.x ruby-on-rails .net sql-server django objective-c excel regex ruby linux ajax iphone xml vba spring asp.net-mvc database wordpress string postgresql wpf windows xcode bash git oracle list vb.net multithreading eclipse algorithm macos powershell visual-studio image forms numpy scala function api selenium