代码之家  ›  专栏  ›  技术社区  ›  hoa tran

如何查找字符的第一次出现

  •  0
  • hoa tran  · 技术社区  · 2 年前

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

    import pandas as pd
    import numpy as np
    
    df = pd.DataFrame({'BAS_DT': ['2023-01-02', '2023-01-03', '2023-01-04', '2023-01-02', '2023-01-03'], 
                       'CUS_NAME': ['A', 'A', 'A', 'B', 'B'],
                       'Y/N': ['Y', 'Y', 'Y', 'N', 'Y'],
                       'cum_count': [1, 2, 3, 1, 2]})
    df
    
        BAS_DT      CUS_NAME    Y/N cum_count
    0   2023-01-02  A           Y   1
    1   2023-01-03  A           Y   2
    2   2023-01-04  A           Y   3
    3   2023-01-02  B           N   1
    4   2023-01-03  B           Y   2
    

    我想查找的第一个出现日期 Y 在中 Y/N 每列 CUS_NAME 。以下是我的预期输出:

    df2 = pd.DataFrame({'BAS_DT': ['2023-01-02', '2023-01-03', '2023-01-04', '2023-01-02', '2023-01-03'], 
                       'CUS_NAME': ['A', 'A', 'A', 'B', 'B'],
                       'Y/N': ['Y', 'Y', 'Y', 'N', 'Y'],
                       'cum_count': [1, 2, 3, 1, 2],
                       'occur_date': ['2023-01-02', np.nan, np.nan, np.nan, '2023-01-03']})
    df2
    
        BAS_DT      CUS_NAME    Y/N cum_count   occur_date
    0   2023-01-02  A           Y   1           2023-01-02
    1   2023-01-03  A           Y   2           NaN
    2   2023-01-04  A           Y   3           NaN
    3   2023-01-02  B           N   1           NaN
    4   2023-01-03  B           Y   2           2023-01-03
    

    我怎样才能得到这个结果。非常感谢。

    1 回复  |  直到 2 年前
        1
  •  1
  •   Panda Kim    2 年前

    密码

    cond = df['Y/N'].eq('Y')
    cond1 = cond.groupby(df['CUS_NAME']).cumsum().eq(1)
    df['occur_date'] = df['BAS_DT'].where(cond & cond1)
    

    df:

           BAS_DT CUS_NAME Y/N  cum_count  occur_date
    0  2023-01-02        A   Y          1  2023-01-02
    1  2023-01-03        A   Y          2         NaN
    2  2023-01-04        A   Y          3         NaN
    3  2023-01-02        B   N          1         NaN
    4  2023-01-03        B   Y          2  2023-01-03
    

    检查示例

    import pandas as pd
    import numpy as np
    
    df = pd.DataFrame({'BAS_DT': ['2023-01-02', '2023-01-03', '2023-01-04', '2023-01-02', '2023-01-03', '2023-01-04'], 
                       'CUS_NAME': ['A', 'A', 'A', 'B', 'B', 'B'],
                       'Y/N': ['Y', 'Y', 'Y', 'N', 'Y', 'N'],
                       'cum_count': [1, 2, 3, 1, 2, 3]})