根据出现在另一列中的值清除列
Clear column based on a value appearing in another column
我觉得这应该很简单,但我一直卡在这个上面。
我的数据框如下所示:
Name Date Graduated Really?
Bob 2014 Yes
Bob 2020 Yes
Sally 1995 Yes
Sally 1999
Sally 1999 No
Robert 2005 Yes
Robert 2005 Yes
我按 Name
和 Date
分组。在每组中,如果 Graduated
中出现“是”,则清除 Really?
列。如果组中没有出现“是”,则保持原样离开。输出应如下所示:
Name Date Graduated Really?
Bob 2014 Yes
Bob 2020 Yes
Sally 1995 Yes
Sally 1999
Sally 1999 No
Robert 2005
Robert 2005 Yes
在执行 df.loc[mask, "Really?"] = None
之前,我一直在尝试 mask = df.groupby(['Name','Date'])['Graduated'].isin('Yes')
的不同变体,但收到 AttributeError(我假设我的语法不正确)。
已编辑预期输出。
试试这个:
s = df['Graduated'].eq('Yes').groupby([df['Name'],df['Date']]).transform('any')
df['Really?'] = df['Really?'].mask(s,'')
我觉得这应该很简单,但我一直卡在这个上面。
我的数据框如下所示:
Name Date Graduated Really?
Bob 2014 Yes
Bob 2020 Yes
Sally 1995 Yes
Sally 1999
Sally 1999 No
Robert 2005 Yes
Robert 2005 Yes
我按 Name
和 Date
分组。在每组中,如果 Graduated
中出现“是”,则清除 Really?
列。如果组中没有出现“是”,则保持原样离开。输出应如下所示:
Name Date Graduated Really?
Bob 2014 Yes
Bob 2020 Yes
Sally 1995 Yes
Sally 1999
Sally 1999 No
Robert 2005
Robert 2005 Yes
在执行 df.loc[mask, "Really?"] = None
之前,我一直在尝试 mask = df.groupby(['Name','Date'])['Graduated'].isin('Yes')
的不同变体,但收到 AttributeError(我假设我的语法不正确)。
已编辑预期输出。
试试这个:
s = df['Graduated'].eq('Yes').groupby([df['Name'],df['Date']]).transform('any')
df['Really?'] = df['Really?'].mask(s,'')