如何用numpy.where判断同一ID是否对应不同DATE值
解决方案
要实现判断同一ID是否存在不同DATE值,并给对应行标记YES/NO,你原来的思路里仅用Count>1是不够的(比如ID222的Count是2但DATE完全相同),正确的做法是先按ID分组统计DATE的唯一值数量,再生成标记列:
步骤1:生成每个ID是否存在多DATE的标记列
用groupby+transform直接在原DataFrame中添加标记,判断每个ID对应的DATE唯一值数量是否大于1:
import pandas as pd import numpy as np # 假设你的df已经加载完成 df['has_multiple_dates'] = df.groupby('ID')['DATE'].transform('nunique') > 1
步骤2:用np.where生成最终的FULFILL?列
基于上面的标记列,直接生成结果:
df['FULFILL?'] = np.where(df['has_multiple_dates'], 'YES', 'NO')
验证结果
运行后你的DataFrame会得到期望的输出:
| ID | Count | DATE | has_multiple_dates | FULFILL? |
|---|---|---|---|---|
| 111 | 3 | 01/01/2020 | True | YES |
| 222 | 2 | 02/12/2020 | False | NO |
| 111 | 3 | 01/01/2020 | True | YES |
| 222 | 2 | 02/12/2020 | False | NO |
| 111 | 3 | 02/10/2020 | True | YES |
| 333 | 2 | 01/25/2020 | True | YES |
| 333 | 2 | 05/02/2020 | True | YES |
| 444 | 1 | 01/01/2020 | False | NO |
如果不需要保留has_multiple_dates列,直接合并成一行代码也可以:
df['FULFILL?'] = np.where(df.groupby('ID')['DATE'].transform('nunique') > 1, 'YES', 'NO')
内容的提问来源于stack exchange,提问作者GuidoSerrano
相关产品推荐
相关产品推荐

