检查数据帧中列中多个条件的最有效方法是什么?

2024-09-29 01:27:11 发布

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

我正在处理一个包含三个相关列和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)

我用来运行它的代码见上文#最小可重复性


Tags: keyiddfreturntimeexample事件filter
1条回答
网友
1楼 · 发布于 2024-09-29 01:27:11

以下是我对groupby的方法:

groups = df.groupby('VisitLink')
s = groups['time'].diff(-1).le(30) & df['dx_filter']
df['shifted'] = np.where(s, groups['key'].shift(-1), np.nan)

输出:

   key VisitLink  dx_filter  time  shifted
0    1   ddcde14          1   100      4.0
1    2   abcde11          1   140      NaN
2    3   absdf12          1    50      NaN
3    4   ddcde14          0   125      NaN
4    5   ddcde14          1   140      NaN

相关问题 更多 >