捕获数据库中某列的状态更改信息

2024-09-27 07:33:44 发布

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

我有一个带有>;表格的90000行:

Student_Group_Number      Status            Date
Group1                    Public            26-Sep-21
Group1                    Public            27-Sep-21
Group1                    Public            29-Sep-21
Group2                    Public            10-Sep-21
Group2                    ABC - Private     15-Sep-21
Group2                    DEF - Private     19-Sep-21
Group3                    Public            06-Sep-21
Group3                    Public            17-Sep-21
Group3                    P - Private       18-Sep-21
Group4                    L - Private       02-Sep-21
Group4                    3 - Private       09-Sep-21
Group4                    X - Private       13-Sep-21

我想查找“何时”组的状态从“公共”更改为“其他”,并以以下格式输出:

Student_Group_Number      Date_change
Group1                    
Group2                    15-Sep-21
Group3                    18-Sep-21
Group4                    02-Sep-21

我花了一些时间来寻找“状态变化捕获”问题,但我没有得到任何实质性的东西。考虑到我可能还需要将日期更改转换为原始数据帧,我也一直在阅读groupby命令,但没有任何效果


Tags: gtnumberdate状态statusgroupprivatepublic
1条回答
网友
1楼 · 发布于 2024-09-27 07:33:44

您可以对每个组使用^{},用Public替换第一个NaN,用Public进行比较,用不匹配的Public进行链式掩码,用^{}聚合的第一个非NaN将不匹配值转换为NaN中的NaN(如果存在):

m = (df.groupby('Student_Group_Number')['Status'].shift(fill_value='Public').eq('Public') &
       df['Status'].ne('Public'))


df = (df.assign(d = df['Date'].where(m))
        .groupby(['Student_Group_Number'])['d']
        .first()
        .reset_index(name='Date_change'))
print (df)
  Student_Group_Number Date_change
0               Group1        None
1               Group2   15-Sep-21
2               Group3   18-Sep-21
3               Group4   02-Sep-21

相关问题 更多 >

    热门问题