我正在处理一个包含三个相关列和270万行的熊猫数据框架。结构如下:
key VisitLink dx_filter time
0 1 ddcde14 1 100
1 2 abcde11 1 140
2 3 absdf12 1 50
3 4 ddcde14 0 125
4 5 ddcde14 1 140
data = [[1,'ddcde14',1,100],[2,'abcde11',1,140],[3,'absdf12',1,50],[4,'ddcde14',0,125],[5,'ddcde14',1,140]]
df_example = pd.DataFrame(data,columns = ['key','VisitLink','dx_filter','time'])
我需要三件事才能成为现实:
-VisitLink:两行之间的匹配
-dx\u过滤器:第一个事件为1
-时间:第二次事件发生在第一次事件发生后的30天内
示例:键1将生成键4作为匹配记录,因为它满足所有条件,但键4不会生成键5,因为其dx_过滤器=0
我进行了一次试验,预计我的方法需要120多个小时才能完成,我想知道是否有办法将时间缩短到<;10小时,如果不可能的话
def add_readmit_id(df):
df['readmit_id'] = np.nan
def set_id(row):
if row['dx_filter'] ==0:
return np.nan
else:
relevant_df = df.loc[df['VisitLink']==row['VisitLink']]
timeframe_df = relevant_df.loc[(relevant_df['time']>row['time'])&(relevant_df['time']<=row['time']+30)]
next_timeframe = timeframe_df['time'].min()
id_row = timeframe_df.loc[timeframe_df['time']==next_timeframe]
if not id_row.empty:
return id_row.iloc[0]['key']
else:
return np.nan
df['readmit_id'] = df.apply(set_id,axis=1)
return df
df_example = add_readmit_id(df_example)
我用来运行它的代码见上文#最小可重复性
以下是我对
groupby
的方法:输出:
相关问题 更多 >
编程相关推荐