如何根据其他列条件向pandas DataFrame列追加拼接字符串?
问题原因
原写法直接给匹配条件的单元格做覆盖式赋值,第二次执行B列条件的赋值语句时,会直接把对应行C列的所有旧值(包括第一次写入的A>=3)替换成B>=3,自然没法保留多条件匹配的结果。
解决方法
和原代码逻辑兼容性最好的写法是把直接赋值改成追加拼接,操作步骤很简单:
- 不要一开始给C列填充
'-',先初始化为空字符串,避免无关字符被拼入最终结果 - 每次匹配到条件时,在单元格原有值的基础上追加对应条件字符串,用空格做分隔
- 所有条件判断完成后,统一去掉每行末尾多余的空格,再把没有匹配到任何条件的空单元格替换为
'-'
完整代码如下:
import pandas as pd A = [1, 2, 2, 6, 5] B = [4, 5, 5, 5, 4] d = {'A': A, 'B': B} df = pd.DataFrame(data=d) # C列初始化为空字符串 df['C'] = '' # 逐条件追加内容,不覆盖原有值 df.loc[df['A'] >= 3, 'C'] += 'A>=3 ' df.loc[df['B'] >= 3, 'C'] += 'B>=3 ' # 收尾处理 df['C'] = df['C'].str.strip().replace('', '-') print(df)
运行输出完全符合预期:
A B C 0 1 4 B>=3 1 2 5 B>=3 2 2 5 B>=3 3 6 5 A>=3 B>=3 4 5 4 A>=3 B>=3
后续如果要新增判断规则,直接按相同格式追加一行df.loc[判断条件, 'C'] += '规则标签 '即可,维护成本很低。
内容的提问来源于stack exchange,提问作者Anna-Kat
相关产品推荐
相关产品推荐

