pandas DataFrame统计列表列元素落在元组区间内的数量实现方法
实现方案
以下两种方案可根据你的数据量灵活选择,输出结果均匹配预期:
小数据量场景(万行级别以内)
用apply逐行处理,写法最简洁,维护成本最低:
import pandas as pd # 示例数据构造 df = pd.DataFrame({ 't': [(1,2), (0,5), (0,4)], 'l': [[1,2,3,4,5,6], [1,4,9], [9,11]] }) # 新增counter列 df['counter'] = df.apply(lambda row: sum(row['t'][0] <= x <= row['t'][1] for x in row['l']), axis=1)
大数据量场景(十万行级别以上)
用explode展开列表列后做向量化判断,避免逐行操作开销,性能更高:
# 展开l列,保留原索引 df_explode = df.explode('l', ignore_index=False) # 批量判断元素是否在对应区间内 mask = (df_explode['l'] >= df_explode['t'].str[0]) & (df_explode['l'] <= df_explode['t'].str[1]) # 按原索引分组统计数量并回写 df['counter'] = mask.groupby(mask.index).sum()
内容的提问来源于stack exchange,提问作者Cranjis
相关产品推荐
相关产品推荐

