如何使用Pandas按条件分组,合并连续非空Fluid的Depth为区间?
解决方案
可以用Pandas的分组聚合功能实现,步骤如下:
首先准备示例数据:
import pandas as pd import numpy as np df = pd.DataFrame({ 'Depth': [235.5, 236, 236.5, 237, 237.5, 238], 'Fluid': [np.nan, 'water', 'water', np.nan, 'water', 'water'] })
然后执行数据处理:
# 标记Fluid非空的有效行 df['valid'] = df['Fluid'].notna() # 生成连续有效行的分组标识 df['group'] = df['valid'].cumsum() # 分组聚合得到结果 result = df[df['valid']].groupby('group').agg( Min_Depth=('Depth', 'min'), Max_Depth=('Depth', 'max'), Fluid=('Fluid', 'first') ).reset_index(drop=True) print(result)
代码解释
df['Fluid'].notna():生成布尔列,标记哪些行的Fluid值不为空,用来区分有效数据块和分隔用的NaN行。df['valid'].cumsum():对布尔列求和,连续的有效行会被分配同一个组号,这样就能把被NaN分隔开的相同Fluid数据块分成不同的组。groupby('group').agg(...):按组聚合,分别计算每组Depth的最小值、最大值,同时取每组的第一个Fluid值(同一组内Fluid值一致)。reset_index(drop=True):移除分组用的group索引,得到整洁的结果格式。
运行后输出结果:
Min_Depth Max_Depth Fluid 0 236.0 236.5 water 1 237.5 238.0 water
内容的提问来源于stack exchange,提问作者naranara
相关产品推荐
相关产品推荐

