如何用Pandas判断DataFrame当前行值是否在之前行出现?
解决方案
根据你的示例输出,实际需求是标记当前值是否为首次出现(即之前未出现过),以下是几种高效实现方式:
方法1:duplicated()取反(最简洁高效)
duplicated()默认会标记重复行(首次出现为False,重复出现为True),取反后正好匹配你的期望:
import pandas as pd df = pd.DataFrame({'Col1': ['A', 'B', 'A', 'C', 'B']}) df['col2'] = ~df['Col1'].duplicated()
输出结果:
| Col1 | col2 |
|---|---|
| A | True |
| B | True |
| A | False |
| C | True |
| B | False |
方法2:groupby+cumcount()
通过分组计数,判断当前行是否为组内第一个元素:
df['col2'] = df.groupby('Col1').cumcount() == 0
逻辑直观,适合需要扩展复杂分组规则的场景,结果与方法1完全一致。
方法3:扩展窗口结合apply(适合理解逻辑,性能略低)
如果想基于扩展窗口实现,可通过apply逐行判断当前值是否在之前的行中出现过:
df['col2'] = df['Col1'].expanding().apply(lambda x: x.iloc[-1] not in x.iloc[:-1])
注:该方法逐行处理,数据量大时性能不如前两种,仅推荐用于学习逻辑。
内容的提问来源于stack exchange,提问作者kodkod
相关产品推荐
相关产品推荐

