嗨,我有这样的DF:

df = pd.DataFrame({'CaseNo':[1,1,1,1,2,2,3,3,3,4,4],
                   'Category':['A','A','IOU','A','B','B','IOU','IOU','IOU','C','IOU']})


python - Python:如何标记此数据集-LMLPHP

我想根据这种情况将CaseNo col标记为:
对于每个CaseNo,如果Category列中出现值'IOU',且值之前有任何值('IOU'除外),则标记为'YES',否则标记为'NO'。

如何在Python中做到这一点?预期结果:
python - Python:如何标记此数据集-LMLPHP

最佳答案

IIUC,并假定仅当存在至少一个YES且其前面有IOU以外的其他值时才设置IOU

m = (df.Category.eq('IOU').view('i1')
       .groupby(df.CaseNo)
       .transform(lambda x: x.diff().eq(1).any()))
df['Label'] = m.map({True:'Yes',False:'No'})




print(df)

    CaseNo Category Label
0        1        A   Yes
1        1        A   Yes
2        1      IOU   Yes
3        1        A   Yes
4        2        B    No
5        2        B    No
6        3      IOU    No
7        3      IOU    No
8        3      IOU    No
9        4        C   Yes
10       4      IOU   Yes




这里的想法是,当在Series.diff()之前为1(IOU)(没有0)时,IOU将为1。

关于python - Python:如何标记此数据集,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/62155497/

10-12 13:52