You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

pandas DataFrame基于B列BW与txt标识筛选生成新列C的实现问题

实现代码

import pandas as pd
import numpy as np

# 构造测试DataFrame
df = pd.DataFrame({
    'A': [1,10,23,45,24,24,55,67,73,26,13,96,53,23,24,43,90],
    'B': [24,23,29, 'BW',49,59,72, 'BW',9,183,17, 'txt',2,49,'BW',479,'BW']
})

# 1. 生成分组ID:每遇到一次BW,分组编号+1,两个相邻BW之间的内容属于同一个分组
df['group_id'] = df['B'].eq('BW').cumsum()

# 2. 标记每个分组内是否存在txt值
df['has_txt'] = df.groupby('group_id')['B'].transform(lambda x: (x == 'txt').any())

# 3. 按规则生成C列
df['C'] = np.nan
# BW位置直接赋值为BW
df.loc[df['B'] == 'BW', 'C'] = 'BW'
# 非BW位置,所在分组无txt则取A列值,否则保留nan
df.loc[(df['B'] != 'BW') & (~df['has_txt']), 'C'] = df['A']

# 清理临时辅助列
df = df.drop(columns=['group_id', 'has_txt'])

print(df)

输出结果验证

运行后得到的C列和你期望的完全一致:

A    B    C
0    1   24    1
1   10   23   10
2   23   29   23
3   45   BW   BW
4   24   49   24
5   24   59   24
6   55   72   55
7   67   BW   BW
8   73    9  NaN
9   26  183  NaN
10  13   17  NaN
11  96  txt  NaN
12  53    2  NaN
13  23   49  NaN
14  24   BW   BW
15  43  479   43
16  90   BW   BW

内容的提问来源于stack exchange,提问作者Aimas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 13:45:02