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

Python 检查数据帧中列中多个条件的最有效方法是什么?,python,pandas,Python,Pandas,我正在处理一个包含三个相关列和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,

我正在处理一个包含三个相关列和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多个小时才能完成,我想知道是否有办法将其缩短到第['time']行和第['time']行以下是我对
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

您能否包含数据框的实际样本以及该样本数据框的预期输出?请将您的问题简化为一个可重复的示例诚实地说,如果不知道如何将显示的数据框输出粘贴到这些文本框中,结构将消失。行之间的连接最多是
1:1
join吗(如果多次匹配,您总是希望在30天内对最接近的进行分组)或可能的
1:m
加入,以便在30天内加入所有匹配?复制数据帧(原始文本)进入您的原始帖子,然后高亮显示它并按CTRL-K,它可能会在VisitLink之间形成1:m连接,匹配的VisitLink之间的时间始终是唯一的。没有机会让它运行足够长的时间来获得关于此相对效率的实际答案-一个缺点是它不允许我运行计数器/跟踪器来查看w每100/1k/10k/100k行的速度都很快。在270万行上应该很快。我想不超过10秒。但这也取决于数据中有多少唯一的
VisitLink
。有大约180万个唯一的VisitLink-不幸的是,大多数都是唯一的-让它在本地运行30分钟,所以我将它移到云cpu,并将更新需要多长时间!
   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