python - 如何在 Python Pandas Dataframe 中有条件地连接 2 列

标签 python python-3.x pandas dataframe

我有以下数据框:

d = {'col1': [1, "Avoid", 3, "Avoid"], 'col2': ["AA", "BB", "Avoid", "Avoid"]}
df = pd.DataFrame(data=d)
df

    col1    col2
0   1       AA
1   Avoid   BB
2   3       Avoid
3   Avoid   Avoid

我必须有条件地将 col1col2 连接成 col3。条件:

  • 只连接 2 列,只要它们都不是避免
  • 如果col1col2中的任何一个是Avoid,col3也将等于Avoid
  • 执行连接时,需要在col3 的列值之间添加"& "。例如,col3 的第一行将是"1 & AA"

最终结果应该如下所示:

    col1    col2    col3
0   1       AA      1 & AA
1   Avoid   BB      Avoid
2   3       Avoid   Avoid
3   Avoid   Avoid   Avoid

如何在不处理 for 循环的情况下执行此操作?

最佳答案

在纯 python 中对字符串运行列表理解:

out = [f"{l}&{r}" 
        if 'Avoid' not in {l, r} 
        else 'Avoid' 
        for l, r in zip(df.col1, df.col2)]
df.assign(col3 = out)
    col1   col2   col3
0      1     AA   1&AA
1  Avoid     BB  Avoid
2      3  Avoid  Avoid
3  Avoid  Avoid  Avoid

关于python - 如何在 Python Pandas Dataframe 中有条件地连接 2 列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73715912/

相关文章:

python - 如何在 Pootle 中按总体完成情况显示排序列表

python-3.x - 无法根据条件获取索引

python - 使用 Pandas 加载数据并使用 SkLearn 执行 LDA

python - 如何选择 DataFrame 列在 Pandas 中进行绘图?

python - 有没有更好的方法,仅在没有值时返回空字符串,或者在有值时返回一个值?

python - 多个 celery 远程 worker

python - 从 cat 重定向会导致不同的 python 解释器行为

python - 将 int 的十进制字符串表示形式转换为 "bytes"

python - 如何正确分配给 pandas 中的多索引数据帧的切片?

python - Pandas 按时间戳和 id 分组并计数