如何批量删除DataFrame行?移除存在体重低于70的用户所有记录
过滤DataFrame:移除曾体重低于70的用户全部数据
需求:检查每个用户的体重记录,只要该用户有任意一次weight低于70,就删除该用户的所有行。最终仅保留所有体重记录均≥70的用户数据。
数据重建代码
import pandas as pd from pandas import Timestamp data = {'date': {0: Timestamp('2014-01-01 00:00:00'), 1: Timestamp('2014-01-02 00:00:00'), 2: Timestamp('2014-01-03 00:00:00'), 3: Timestamp('2014-01-04 00:00:00'), 4: Timestamp('2014-01-05 00:00:00'), 5: Timestamp('2014-01-06 00:00:00'), 6: Timestamp('2014-01-07 00:00:00'), 7: Timestamp('2014-01-08 00:00:00')}, 'name': {0: 'Thomas', 1: 'Thomas', 2: 'Thomas', 3: 'Max', 4: 'Max', 5: 'Paul', 6: 'Paul', 7: 'Paul'}, 'size': {0: 130, 1: 132, 2: 132, 3: 143, 4: 150, 5: 140, 6: 140, 7: 141}, 'weight': {0: 60, 1: 65, 2: 80, 3: 75, 4: 56, 5: 75, 6: 76, 7: 74}} df = pd.DataFrame(data)
解决方案
利用groupby+transform实现批量筛选:
# 生成掩码:标记所有体重从未低于70的用户对应的行 mask = df.groupby('name')['weight'].transform(lambda x: (x >= 70).all()) # 过滤得到结果 result_df = df[mask]
处理结果
运行上述代码后,result_df仅保留Paul的所有记录:
date name size weight 5 2014-01-06 Paul 140 75 6 2014-01-07 Paul 140 76 7 2014-01-08 Paul 141 74
内容的提问来源于stack exchange,提问作者newcomer
相关产品推荐
相关产品推荐

