如何判断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
相关产品推荐
相关产品推荐

