Python索引DataFrame切片:获取指定位置Value1列数据
嘿,我来帮你搞定这个切片需求!首先得提个小细节:你的DataFrame里列名是Channel,但现有代码里写的是Chan,这会导致筛选不到数据,得先修正这个问题。
接下来咱们一步步实现你要的切片:
步骤1:修正筛选逻辑,获取目标行的索引
先正确筛选出Channel为A/B的行,然后拿到它们的索引:
# 修正列名,筛选Channel为A或B的行 idxall = df[df['Channel'].isin({'A', 'B'})] # 获取第一个和最后一个目标行的索引 first_target_idx = idxall.index[0] last_target_idx = idxall.index[-1]
步骤2:计算切片的范围
我们需要取第一个目标行上方2行到最后一个目标行下方2行的范围,这里要注意边界问题(不能超出DataFrame的索引范围):
# 计算切片起始索引:第一个目标行往上2行,最小不能小于0 start_idx = max(first_target_idx - 2, 0) # 计算切片结束索引:最后一个目标行往下2行,最大不能超过DataFrame的最后一个索引 end_idx = min(last_target_idx + 2, df.index[-1])
步骤3:提取Value1列的切片
因为Pandas的loc切片是左闭右开的,所以我们要把结束索引+1,才能包含最后一行:
# 获取Value1列的目标切片 value1_result = df.loc[start_idx:end_idx + 1, 'Value1']
针对你的示例DataFrame验证结果
你的示例DataFrame默认索引是0-9:
- 第一个目标行是索引3(Event行,Channel=A),往上2行是索引1
- 最后一个目标行是索引6(Post行,Channel=B),往下2行是索引8
最终切片的Value1结果就是:35, 42, 23, 50, 79, 88, 55, 62, 43
内容的提问来源于stack exchange,提问作者bigballerbrand
相关产品推荐
相关产品推荐

