You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

基于两列字符串相似度及第三列值差异在Pandas DataFrame中识别行对并新增判断列

基于两列字符串相似度及第三列值差异在Pandas DataFrame中识别行对并新增判断列

嘿,我完全get到你的需求了!咱们来一步步解决这个Pandas里的行对识别和新增判断列的问题~

首先先明确下你的核心需求:

  • 要基于Col1Col2的字符串值匹配,找出对应的行组/行对
  • 每一组/对里的行,Col3的取值必须同时存在不同的选项(比如一个是Yes,一个是No)
  • 新增new_col列,标记每一行是否满足“存在同组的配对行,且两者Col3值不同”的条件

第一步:模拟示例数据

先把你提供的示例数据用代码还原出来:

import pandas as pd

# 模拟你给出的初始DataFrame
df = pd.DataFrame({
    'Col1': ['A', 'A', 'B', 'B', 'C', 'C'],
    'Col2': ['X', 'X', 'Y', 'Y', 'Z', 'Z'],
    'Col3': ['Yes', 'No', 'Yes', 'Yes', 'No', 'Yes']
})

第二步:实现核心逻辑代码

我们可以用groupby分组+条件判断的方式来实现,代码简洁且高效:

# 按Col1和Col2分组,检查每组是否同时包含"Yes"和"No"两种取值
group_validation = df.groupby(['Col1', 'Col2'])['Col3'].apply(
    lambda group: {'Yes', 'No'}.issubset(group.unique())
)

# 将分组的验证结果映射回原DataFrame,生成new_col
df['new_col'] = df.set_index(['Col1', 'Col2']).index.map(group_validation)

第三步:查看最终结果

运行完上面的代码后,你的DataFrame就会变成你想要的最终样式:

Col1Col2Col3new_col
AXYesTrue
AXNoTrue
BYYesFalse
BYYesFalse
CZNoTrue
CZYesTrue

逻辑解释

  • 分组groupby(['Col1', 'Col2'])会把Col1和Col2字符串完全匹配的行归为同一组,这正好对应你要找的“行对/行组”
  • 组内验证lambda group: {'Yes', 'No'}.issubset(group.unique())会检查当前组的Col3唯一值集合里是否同时包含"Yes"和"No",也就是组内存在Col3值不同的行
  • 结果映射:通过index.map把每个组的验证结果对应到原DataFrame的每一行,确保同一组的所有行都得到相同的new_col

如果你的实际场景中Col1/Col2是相似字符串而非完全匹配,那可以引入fuzzywuzzy这类模糊匹配库先做字符串相似度分组,不过从你的示例来看完全匹配的场景用上面的代码就足够啦~

备注:内容来源于stack exchange,提问作者Jeff Jelen

火山引擎 最新活动