对我来说这是另一个具有挑战性的问题,但对你来说可能是一个简单的问题。我只是不知道如何以Python的方式思考;
我有一个数据框:
dt={'Name':['A','A','B','B','C','D','D'],'FG':['N','Y','N','Y','N','N','N'], 'Date':[2016,2017,2017,2016,2017,2017,2017]}
df=pd.DataFrame(data=dt,columns=['名称','FG','日期'])
我想要做的是,对于“Names”中的每个名称(可以重复)检查“FG”中的标志值,如果该值设置为“Y”并且与其关联的日期大于与“N”相关的一个我将保留该条目,否则我将删除它。由于缺乏经验,我真的无法想出编写这段代码的方法。我所拥有的是可视化这里
Name FG Date
A N 2016
A Y 2017
B N 2017
B Y 2016
C Y 2017
D N 2017
D N 2017
这是我想要返回的内容
Name FG Date
A Y 2017
C Y 2017
谢谢大家
最佳答案
再添加一列恢复组内的最大值
。
df['check']=df.groupby('Name').Date.transform('max')
df.loc[(df.check==df.Date)&(df.FG=='Y'),:]
Out[786]:
Name FG Date check
1 A Y 2017 2017
4 C Y 2017 2017
编辑:
mask=df.groupby('Name').\
apply(lambda x : (x.FG=='Y')&(x.Date>min(x.Date)) if len(x.Date)>1 else (x.FG=='Y')).values
df[mask]
Out[808]:
Name FG Date
1 A Y 2017
4 C Y 2017
数据输入
df
Out[809]:
Name FG Date
0 A N 2016
1 A Y 2017
2 B N 2017
3 B Y 2016
4 C Y 2017
5 D N 2017
6 D N 2017
7 E Y 2017
8 E N 2017
关于Python数据框: clean data of one column by comparing values from other columns,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46966196/