Python数据框: clean data of one column by comparing values from other columns

标签 python pandas numpy

对我来说这是另一个具有挑战性的问题,但对你来说可能是一个简单的问题。我只是不知道如何以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/

相关文章:

python - 枕头保存到 BytesIO 或 StringIO KeyError : "JPG"

python - 如何使用 python 将 yaml 文件作为字典读取并更新值

python - Pandas:读取 CSV 时强制错误

python - 查找较小数组与较大数组最匹配的位置

python - "Undecorate" turtle 窗

python - 为什么 pyautogui 热键不能一直在 mac 上工作?

python - 如何获取所有给定DataFrame(Pandas)中某个元素的位置?

python-3.x - Apache NiFi : Import Error: No module named Pandas 中的 Python 错误

python - 动态创建 lambda 函数

python - 如何根据条件选择 DataFrame 中的特定列