如何在函数内基于索引同步删除两个DataFrame的对应行
解决方案
核心逻辑是先统一提取所有待删除的行索引,再同时对两个DataFrame执行删除操作,相比原循环逐次删除的写法效率更高,实现代码如下:
def filna_intake(df, labels): # 定义要删除的intake取值列表 exclude_values = [ 'bottom 25% bottom 25%', 'top 25% top 25%', 'mid 50% mid 50%', 'mid 50% top 25%', 'mid 50% bottom 25%', 'top 25% mid 50%', 'bottom 25% mid 50%', 'top 25% bottom 25%', 'bottom 25% top 25%' ] # 一次性获取所有待删除的索引 drop_index = df.loc[df['intake'].isin(exclude_values)].index # 同时删除两个DataFrame的对应行 df.drop(drop_index, inplace=True) labels.drop(drop_index, inplace=True) return df, labels
调用方式
predictors, labels = filna_intake(predictors, labels)
说明
- 待删除索引通过
df.loc[df['intake'].isin(exclude_values)].index直接获取,拿到的索引集合可以直接传入labels.drop方法实现对应行删除 - 必须保证传入的
predictors和labels索引严格对齐,即同一索引值对应同一条样本,才能保证删除的是匹配的行 - 如果不想使用
inplace参数(避免直接修改原变量产生副作用),可以改用如下无副作用的写法:
def filna_intake(df, labels): exclude_values = [ 'bottom 25% bottom 25%', 'top 25% top 25%', 'mid 50% mid 50%', 'mid 50% top 25%', 'mid 50% bottom 25%', 'top 25% mid 50%', 'bottom 25% mid 50%', 'top 25% bottom 25%', 'bottom 25% top 25%' ] drop_index = df.loc[df['intake'].isin(exclude_values)].index df = df.drop(drop_index) labels = labels.drop(drop_index) return df, labels
内容的提问来源于stack exchange,提问作者Silvio sjsj
相关产品推荐
相关产品推荐

