嗨,我有这样的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']})
我想根据这种情况将
CaseNo
col标记为:对于每个
CaseNo
,如果Category
列中出现值'IOU',且值之前有任何值('IOU'除外),则标记为'YES',否则标记为'NO'。如何在Python中做到这一点?预期结果:
最佳答案
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/