You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Pandas DataFrame中按客户获取Y的首次出现日期?

问题:为每个客户标记Y/N列中Y的首次出现日期

用户拥有如下Pandas DataFrame:

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]})

原始数据展示:

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

期望实现的效果:为每个CUS_NAME找到Y/N列中Y的首次出现日期,仅在该首次出现的行填充对应日期,其余行填充NaN,最终输出如下:

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']})

期望输出展示:

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

# 1. 提取每个客户首次出现Y的日期
first_y_dates = df[df['Y/N'] == 'Y'].groupby('CUS_NAME')['BAS_DT'].first().reset_index(name='occur_date')

# 2. 将日期合并回原DataFrame,让每行都对应客户的首次Y日期
df = df.merge(first_y_dates, on='CUS_NAME', how='left')

# 3. 仅保留首次出现Y的行的日期,其余行设为NaN
df['occur_date'] = np.where(
    (df['Y/N'] == 'Y') & (df.groupby('CUS_NAME').cumcount() == 0),
    df['occur_date'],
    np.nan
)

print(df)

代码逻辑说明

  • 第一步:先筛选出所有Y/N为Y的行,再按CUS_NAME分组,取每组的第一个BAS_DT,得到每个客户首次出现Y的日期。
  • 第二步:通过merge将这些日期关联到原表的每一行,确保每个客户的所有行都能获取到对应的首次Y日期。
  • 第三步:通过np.where做条件判断:仅当当前行是该客户第一个Y行时,保留日期,其他情况(非Y行、同客户后续的Y行)都设为NaN,完全匹配需求。

内容的提问来源于stack exchange,提问作者hoa tran

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 15:46:33