基于数据框列的结果,随后的所有行都等于一个重复值,直到结果更改并出现新的重复值 [英] based on dataframe column result all following rows equal a repetitive value until result changes and new repetitive value occurs

查看:66
本文介绍了基于数据框列的结果,随后的所有行都等于一个重复值,直到结果更改并出现新的重复值的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我的简化数据框如下:

df = pd.DataFrame()
df['A'] = ('IGNORE','IGNORE','IGNORE','YES','IGNORE','YES','YES','YES','IGNORE','IGNORE','IGNORE','YES','IGNORE','IGNORE','IGNORE','IGNORE','IGNORE','IGNORE','IGNORE','IGNORE','IGNORE', 'NO','IGNORE','IGNORE','IGNORE','IGNORE')

我需要反转数据帧(我知道我可以通过df = df [::-1]完成此操作),然后按如下所示制作B列.

I need to reverse dataframe (which I know I can do via df = df[::-1]) then make column B as follows.

  • 如果出现是",则随后的行将导致良好",直到再次出现是"或否"为止,反之亦然,发生否"的情况除外,除非不良"将替代良好"

期望输出如下:

df['B'] = ('GOOD','GOOD','GOOD','YES','IGNORE','YES','YES','YES','GOOD','GOOD','GOOD','YES','BAD','BAD','BAD','BAD','BAD','BAD','BAD','BAD','BAD', 'NO','IGNORE','IGNORE','IGNORE','IGNORE')

推荐答案

想法是

Idea is use Series.map dy dictioanry first with back filling missing values and replace last group by fillna to Series, which is used for replace IGNORE consecutive values - 2 or more:

s = df['A'].map({'IGNORE': np.nan, 'YES':'GOOD', 'NO':'BAD'}).bfill().fillna(df['A'])
m1 = df.groupby(df['A'].ne(df['A'].shift()).cumsum())['A'].transform('size').ne(1)
m2 = df['A'].eq('IGNORE')

df['C'] = np.where(m1 & m2, s, df['A'])
print(df)
         A       B       C
0   IGNORE    GOOD    GOOD
1   IGNORE    GOOD    GOOD
2   IGNORE    GOOD    GOOD
3      YES     YES     YES
4   IGNORE  IGNORE  IGNORE
5      YES     YES     YES
6      YES     YES     YES
7      YES     YES     YES
8   IGNORE    GOOD    GOOD
9   IGNORE    GOOD    GOOD
10  IGNORE    GOOD    GOOD
11     YES     YES     YES
12  IGNORE     BAD     BAD
13  IGNORE     BAD     BAD
14  IGNORE     BAD     BAD
15  IGNORE     BAD     BAD
16  IGNORE     BAD     BAD
17  IGNORE     BAD     BAD
18  IGNORE     BAD     BAD
19  IGNORE     BAD     BAD
20  IGNORE     BAD     BAD
21      NO      NO      NO
22  IGNORE  IGNORE  IGNORE
23  IGNORE  IGNORE  IGNORE
24  IGNORE  IGNORE  IGNORE
25  IGNORE  IGNORE  IGNORE

这篇关于基于数据框列的结果,随后的所有行都等于一个重复值,直到结果更改并出现新的重复值的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆