如何在Python中返回自EXPR以来通过的记录数

如何在Python中返回自EXPR以来通过的记录数,python,pandas,sequence,spss-modeler,Python,Pandas,Sequence,Spss Modeler,自从使用Python和Pandas以来,我一直在尝试复制IBMSPSS函数@,但不幸的是,我的过程中有一部分被卡住了 如果有人知道一个直接函数可以复制IBMSPSSClem@因为它使用python,我将不胜感激 以下是有关详细信息的链接: “此函数返回此条件为真的最后一条记录的偏移量,即在此条件为真的记录之前的记录数。如果该条件从未为真,@SINCE返回@INDEX+1。”(IBM,2020) 我一直在尝试从头开始复制此函数,但没有找到正确的方法: 你们能用Python/Pandas帮我解决这

自从使用Python和Pandas以来,我一直在尝试复制IBMSPSS函数@,但不幸的是,我的过程中有一部分被卡住了

如果有人知道一个直接函数可以复制IBMSPSSClem@因为它使用python,我将不胜感激

以下是有关详细信息的链接:

“此函数返回此条件为真的最后一条记录的偏移量,即在此条件为真的记录之前的记录数。如果该条件从未为真,@SINCE返回@INDEX+1。”(IBM,2020)

我一直在尝试从头开始复制此函数,但没有找到正确的方法:

你们能用Python/Pandas帮我解决这个问题吗

这就是问题所在

我的数据如下所示:

在IBM SPSS中,我使用以下公式获得以下数据:

if Type = 'A' or Type = 'B' then @SINCE(Flag = 'myStatus') else -1 endif
这是输出:

+------+----------+----------------+
| Type | Flag     | Expected Count |
+------+----------+----------------+
| d    |          | -1             |
+------+----------+----------------+
| A    | myStatus | 0              |
+------+----------+----------------+
| c    |          | -1             |
+------+----------+----------------+
| B    | myStatus | 2              |
+------+----------+----------------+
| c    |          | -1             |
+------+----------+----------------+
| c    | myStatus | -1             |
+------+----------+----------------+
| c    |          | -1             |
+------+----------+----------------+
| d    |          | -1             |
+------+----------+----------------+
| d    |          | -1             |
+------+----------+----------------+
| A    | myStatus | 4              |
+------+----------+----------------+

提前感谢。

因此,我找到了解决此问题的方法:以下是代码:

df = pd.DataFrame({"Type":["d", "A", "c", "B", "c", "c", "c", "d", "d", "A"],
               "Flag":[np.nan, "myStatus", np.nan, "myStatus", np.nan, "myStatus", np.nan, np.nan, np.nan, "myStatus"]})
解决问题的函数:

def spssSince(df):
   df_temp = df
   df_temp = df[df.Flag=="myStatus"]
   df_temp['last_ind'] = df_temp.index
   df_temp['last_ind'] = df_temp.last_ind.shift(1)
   df_temp['last_ind'] = df_temp['last_ind'].fillna(1)
   df_temp["Expected Count"] = df_temp.index - df_temp.last_ind
   df_temp.loc[~df_temp.Type.isin(["A", "B"]), "Expected Count"] = -1
   DFreturn = pd.merge(left=df, right=df_temp.drop(['Type', 'Flag', 'last_ind'], axis=1), how="left", left_index=True, right_index=True)
   DFreturn["Expected Count"] = DFreturn["Expected Count"].fillna(-1)
   return DFreturn

基本上,该函数根据一个条件计算上一个“自”值,计算具有验证的索引中的实际索引(使用shift())。

您尝试过什么吗?你有样本数据和预期输出吗?AMC,很抱歉,我在我的帖子(这是我的第一篇帖子)中添加表格时遇到了问题,我添加了预期输出,我希望它能让事情变得更清楚。
def spssSince(df):
   df_temp = df
   df_temp = df[df.Flag=="myStatus"]
   df_temp['last_ind'] = df_temp.index
   df_temp['last_ind'] = df_temp.last_ind.shift(1)
   df_temp['last_ind'] = df_temp['last_ind'].fillna(1)
   df_temp["Expected Count"] = df_temp.index - df_temp.last_ind
   df_temp.loc[~df_temp.Type.isin(["A", "B"]), "Expected Count"] = -1
   DFreturn = pd.merge(left=df, right=df_temp.drop(['Type', 'Flag', 'last_ind'], axis=1), how="left", left_index=True, right_index=True)
   DFreturn["Expected Count"] = DFreturn["Expected Count"].fillna(-1)
   return DFreturn