如何根据两个不同列的日期获取交叉联接表的唯一记录?

2024-10-06 04:00:50 发布

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

我要创造一个相当复杂的逻辑。我有一些客户诊所遇到的数据,这些数据具有历史测试结果,R_DATE_TESTEDR_RESULT映射到每个P_DATE_ENCOUNTER的每个客户(P_CLIENT_ID

^{tb1}$

数据已排序。如何获取每个客户机遭遇的唯一记录(组P_CLIENT_ID AND P_DATE_ENCOUNTER),其中R_DATE_TESTED < R_DATE_ENCOUNTER(但最近的一个)。此外,如果R_DATE_TESTED < R_DATE_ENCOUNTER不是真的;它返回空值

逻辑结果应如下所示:

^{tb2}$

其思想是,对于每个P_CLIENT_ID,每个P_ENCOUNTER_ID都返回其最近的前一个R_RESULT(遭遇之前的最新结果)。如果客户机没有在P_DATE_ENCOUNTER之前的结果,即(R_DATE_TESTED不是<;P_DATE_ENCOUNTERED),那么它将为这些列返回null(如前两条记录所示)。我想可能是在分区和.ffill()上使用一些排序的组合,但我真的被卡住了


Tags: 数据clientiddate客户机客户排序记录
1条回答
网友
1楼 · 发布于 2024-10-06 04:00:50

Yuo可以使用以下代码:

import numpy as np

# df - your DataFrame

group = df.groupby(['P_CLIENT_ID', 'P_DATE_ENCOUNTER'])

def foo(df):
    result = df.loc[df.P_DATE_ENCOUNTER>df.R_DATE_TESTED, ['R_DATE_TESTED', 'R_RESULT']].tail(1).reset_index()
    if not result.empty:
        return result
    else:
        return pd.DataFrame([[np.nan, np.nan, np.nan]], columns=['RECORD_ID','R_DATE_TESTED', 'R_RESULT'])


group.apply(foo)

相关问题 更多 >