求助:按Stimulus特定序列分组DataFrame中的时间点
解决方案
核心思路
要实现按指定Stimulus序列分组,需先把被无关刺激(5、6、14)隔开的连续目标行分割成独立块,再逐一匹配目标序列,提取对应Timepoint。
代码实现
import pandas as pd # 1. 加载你的数据(如果是从文件读取,替换成pd.read_csv等方法) data = { 'Timepoint': [75300, 76158, 76661, 76716, 76769, 78722, 79333, 80056, 80559, 80614, 82617, 83228, 83728, 84231, 84286, 86289, 86900, 87440, 87943, 87998, 90001, 90614], 'Stimulus': [5,6,14,7,8,9,10,6,14,7,9,10,6,14,7,9,10,6,14,7,9,10] } df = pd.DataFrame(data) # 2. 标记目标行并生成分组ID(把被无关刺激隔开的连续目标行归为一组) df['is_target'] = df['Stimulus'].between(7, 10) df['group_id'] = (~df['is_target']).cumsum() target_df = df[df['is_target']].copy() # 3. 定义目标序列并匹配分组 seq_full = [7,8,9,10] seq_short = [7,9,10] group_full = [] # 存符合7,8,9,10的时间点列表 group_short = [] # 存符合7,9,10的时间点列表 for gid, group in target_df.groupby('group_id'): current_stimulus = group['Stimulus'].tolist() current_time = group['Timepoint'].tolist() if current_stimulus == seq_full: group_full.append(current_time) elif current_stimulus == seq_short: group_short.append(current_time) # 查看结果 print("符合7,8,9,10的时间点组:", group_full) print("符合7,9,10的时间点组:", group_short)
结果说明
运行后:
group_full会输出[[76716, 76769, 78722, 79333]],对应数据中唯一完整的7-8-9-10序列group_short会输出三个子列表,对应所有7-9-10的连续序列
内容的提问来源于stack exchange,提问作者I Paul Roy
相关产品推荐
相关产品推荐

