标记一列中的ID首次出现在另一列中的时间

2024-09-28 21:27:34 发布

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

我有一个如下所示的数据帧:

 ID1 ID2 Date
 1   2   01/01/2018
 1   2   03/01/2018
 1   2   04/05/2018
 2   1   06/06/2018
 1   2   08/06/2018
 3   4   09/07/2018

等等

我需要做的是标记ID1中的ID第一次出现在ID2中。在上面的例子中

ID1 ID2 Date         Flag
 1   2   01/01/2018
 1   2   03/01/2018
 1   2   04/05/2018
 2   1   06/06/2018
 1   2   08/06/2018  Y
 3   4   09/07/2018

我使用以下代码告诉我ID1是否出现在ID2中:

ID2List= df['ID2'].tolist()
ID2List= list(set(IDList))  # dedupe list
df['ID1 is in ID2List'] = np.where(df[ID1].isin(ID2List), 'Yes', 'No')

但这只告诉我,有一种情况,ID1出现在ID2的某个点上,而不是第一次出现的事件

有什么帮助吗


Tags: 数据代码标记iddfdatelist例子
1条回答
网友
1楼 · 发布于 2024-09-28 21:27:34

一种想法是使用next和生成器表达式来计算ID1中匹配项的索引。然后与索引进行比较,并使用argmax得到第一个True值的索引:

idx = df.apply(lambda row: next((idx for idx, val in enumerate(df['ID1']) \
                                 if row['ID2'] == val), 0), axis=1)

df.loc[(df.index > idx).argmax(), 'Flag'] = 'Y'

print(df)

   ID1  ID2        Date Flag
0    1    2  01/01/2018  NaN
1    1    2  03/01/2018  NaN
2    1    2  04/05/2018  NaN
3    2    1  06/06/2018    Y
4    1    2  08/06/2018  NaN
5    3    4  09/07/2018  NaN

相关问题 更多 >