繁体   English   中英

Python Dataframe:通过比较其他列的值来清理一列的数据

[英]Python Dataframe: clean data of one column by comparing values from other columns

对我来说另一个具有挑战性的问题,但对你来说可能是一个简单的问题。 我只是不知道如何以一种蟒蛇的方式思考;

我有一个数据框:

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=['Name','FG', 'Date'])

我想要做的是,对于“名称”中的每个名称(可以是重复的)检查“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

谢谢各位大佬

再添加一列恢复组内的max

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM