如何用Python Pandas实现当Age=1时删除指定条件的行?
解决方法
你写的代码逻辑有误,把所有条件用|(或)连接后,会删掉所有Age==1、Medal>20、Height<10或Weight<50的行,这和需求不符。需求是仅当Age等于1时,删除其中满足Medal>20、Height<10或Weight<50的行,也就是要保留:
- 所有
Age≠1的行 Age==1但同时不满足三个删除条件的行
下面是两种正确的实现方式:
方法1:直接筛选保留的行(推荐,更高效)
# 保留Age≠1的行,或者Age=1但不满足三个删除条件的行 df = df[~((df['Age'] == 1) & ((df['Medal'] > 20) | (df['Height'] < 10) | (df['Weight'] < 50)))]
解释:
(df['Age'] == 1) & ((df['Medal'] > 20) | (df['Height'] < 10) | (df['Weight'] < 50))定位到需要删除的行- 前面加
~取反,就是需要保留的行
方法2:使用drop方法
# 先找到需要删除的行索引,再删除 drop_indices = df.loc[((df['Age'] == 1) & ((df['Medal'] > 20) | (df['Height'] < 10) | (df['Weight'] < 50)))].index df = df.drop(drop_indices)
解释:
- 先筛选出
Age==1且满足任一删除条件的行,获取它们的索引 - 用
drop方法删除这些索引对应的行
内容的提问来源于stack exchange,提问作者Odpop
相关产品推荐
相关产品推荐

