首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python:如何标记此数据集

Python:如何标记此数据集
EN

Stack Overflow用户
提问于 2020-06-02 15:26:52
回答 4查看 760关注 0票数 2

嗨,我有这样的df:

代码语言:javascript
复制
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标签:

对于每个CaseNo,如果在Category列中出现了值'IOU‘,其中任何值(’IOU‘除外)出现在 it之前--则标记为’是‘,否则标记为’否‘。

我如何在Python中做到这一点?预期成果:

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2020-06-02 15:38:13

,并假设YES只在至少有一个IOU和它前面的IOU以外的值时才应该设置

代码语言:javascript
复制
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'})

代码语言:javascript
复制
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

这里的想法是,当有一个1 ( Series.diff() )前面有一个0 (无IOU)时,0将是1。

票数 2
EN

Stack Overflow用户

发布于 2020-06-02 15:33:21

让我们试试transformfirstany

代码语言:javascript
复制
g=df.Category.eq('IOU').groupby(df['CaseNo'])
m=g.transform('any') & ~g.transform('first')
df['New']=m.map({True:'Yes',False:'No'})
df
Out[24]: 
    CaseNo Category  New
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
票数 1
EN

Stack Overflow用户

发布于 2020-06-02 15:37:57

下面的代码可以满足您的需要。它使用groupbyindex。其优点是,您可以随时修改函数func,以便按所需进行更新。其他答案无疑是具体的,但不能修改太多。

代码语言:javascript
复制
def func(x):
    try:
        return 'YES' if x.index('IOU')!=0 else 'NO'
    except:
        return "NO"
mapper = df.groupby("CaseNo")['Category'].agg(list).apply(func)
df['Label'] = df['CaseNo'].apply(lambda x: mapper[x])
print(df)

输出:

代码语言:javascript
复制
    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
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62155497

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档