You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Pandas筛选首次测量体重处于指定区间的用户

解决方法:保留首次测量体重符合区间的用户

我明白你的需求啦——你需要筛选出那些首次测量(最小day_n对应的记录)体重落在指定区间内的用户,并且保留这些用户的所有测量记录对吧?咱们可以通过以下几步实现:

核心思路

  1. 先找出每个用户的首次测量记录(即该用户day_n最小的那条数据)
  2. 从这些首次记录里筛选出体重在min_weight到max_weight之间的用户ID
  3. 用筛选后的用户ID列表,去过滤原数据集,只保留这些用户的所有记录

修改后的完整代码

结合你已有的代码,我把筛选步骤加进去了,你可以直接参考:

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

df = pd.read_csv('../datasets/measurements_2019-12-31_2021-07-01.csv')
# 体重过滤(最小、最大值)
df = df[df['weight'] > 25]
df = df[df['weight'] < 300]
# 天数过滤(最小、最大值)
df = df[df['day_n'] > -7]
df = df[df['day_n'] < 187]
# 仅保留测量记录数>3的用户
df = df.groupby('user_id').filter(lambda x: len(x) > 3)

# ------------------- 新增的筛选步骤 -------------------
# 1. 定义你需要的体重区间
min_weight = 70
max_weight = 75

# 2. 获取每个用户首次测量(day_n最小)的记录的索引
first_measure_idx = df.groupby('user_id')['day_n'].idxmin()
first_measures = df.loc[first_measure_idx]

# 3. 筛选出首次测量体重符合区间的用户ID
valid_user_ids = first_measures[
    (first_measures['weight'] >= min_weight) & 
    (first_measures['weight'] <= max_weight)
]['user_id'].tolist()

# 4. 只保留这些有效用户的所有记录
df = df[df['user_id'].isin(valid_user_ids)]
# -----------------------------------------------------

# 绘制散点图
plt.scatter(df['day_n'], df['weight'])
# 绘制回归线
m, b = np.polyfit(df['day_n'], df['weight'], 1)
plt.plot(df['day_n'], m*df['day_n']+b, color='red')
plt.show()

代码解释

  • df.groupby('user_id')['day_n'].idxmin():这一步会找到每个用户组里day_n最小的那条记录的行索引,确保我们拿到的是每个用户的首次测量数据
  • first_measures就是所有用户的首次测量记录集合,我们在这里筛选体重符合要求的用户ID
  • 最后用isin(valid_user_ids)过滤原数据集,只保留这些用户的所有测量记录,完全符合你的需求

用你给出的示例数据测试的话,user_id 1的首次测量体重是72(在70-75之间)会被保留,user_id 2的首次测量体重是76(超出区间)会被排除,完美匹配你的预期~

内容的提问来源于stack exchange,提问作者Jasper

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.28 11:57:40