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

如何判断pandas DataFrame相邻行的列表列元素是否存在交集

解决pandas列表列相邻行匹配相同元素的问题

错误原因说明

  • 调用split()报错:DIAG_CD列存储的是原生列表类型,不是逗号分隔字符串,split()是字符串专属方法,列表对象无法调用。
  • 列表用&报错:Python原生列表不支持按位与/交集运算符&,只有集合类型支持交集运算,需要先把列表转为集合再计算。
  • 现有交集代码的隐藏问题:shift(1)操作会让第一行的上一行值为NaN,直接将NaN转为集合会抛出类型错误,需要先对空值做处理。

完整可运行解决方案

import pandas as pd

df = pd.read_parquet("samplefile.parquet", engine='pyarrow')
# 保留原有移除换行符的逻辑
df.replace(to_replace=[r"\\t|\\n|\\r", "\t|\n|\r"], value=["",""], regex=True, inplace=True)

# 提取上一行的诊断代码列,空值填充为空列表避免运算报错
prev_diag = df['DIAG_CD'].shift(1).fillna('').apply(lambda x: x if isinstance(x, list) else [])

# 计算相邻行是否有共同元素:1=有,0=没有
df['diagCodeMatch'] = [1 if set(a) & set(b) else 0 for a, b in zip(df['DIAG_CD'], prev_diag)]

# 如需保留具体的交集元素可保留这行代码
df['intersection'] = [list(set(a) & set(b)) for a, b in zip(df['DIAG_CD'], prev_diag)]

性能说明

该方案采用列表推导实现,10万行规模的数据集可在秒级完成运算,性能优于pandas原生apply方法。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.10 06:15:02