Pandas新增Col2列:仅Col1无逗号行赋值其余为None的实现问题
问题原因
你写的for循环存在逻辑错误:每次满足条件时执行的df['Col2'] = df['Col1']是对整个Col2列赋值,而非对应行,所以最终结果只会被最后一次满足条件的操作覆盖全列。
正确实现(推荐向量化操作,性能远高于循环,适合数千行量级数据)
首先生成符合要求的初始Col2:
# 不包含逗号的行赋值Col1的值,其余设为None df['Col2'] = df['Col1'].where(~df['Col1'].str.contains(','), other=None)
然后执行向下填充None的操作:
# 向下填充空值 df['Col2'] = df['Col2'].ffill()
如果你确实需要用for循环实现,正确写法如下:
for idx, val in enumerate(df['Col1']): if ',' not in val: df.loc[idx, 'Col2'] = val else: df.loc[idx, 'Col2'] = None # 后续同样用ffill做向下填充 df['Col2'] = df['Col2'].ffill()
效果验证
运行上述代码后得到的df结构如下:
| Col1 | Col2 |
|---|---|
| Apples | Apples |
| Bananna, Pear | Apples |
| Suns, Moons, Stars | Apples |
| Orange, Blue, Green | Apples |
完全符合你后续要做向下填充的需求。
内容的提问来源于stack exchange,提问作者pkpto39
相关产品推荐
相关产品推荐

