如何按行条件移除DataFrame列值或按需填充列数据?
DataFrame逐行条件处理解决方案
需求说明
- 当
column1有值时,清空对应行的column2和column3 - 仅在
column1为空的行,通过column0调用do_something()填充column2和column3
原数据示例
column1 column2 column3 ABCDEFG ABCDEFG EFG ABCDEFG ABCDEFG EFG ABC ABCDEFG ABCDEFG EFG ABCDEFG EFG
期望结果
column1 column2 column3 ABCDEFG ABCDEFG ABC ABCDEFG ABCDEFG EFG
原代码问题
之前的代码用if data['column1'].empty:做全局列判断,而非逐行逻辑,导致无法实现需求。
正确实现代码
# 先处理需求1:column1有值的行,清空column2和column3 mask_has_col1 = data['column1'].notna() & data['column1'].str.strip().ne('') data.loc[mask_has_col1, ['column2', 'column3']] = None # 需空字符串则替换为'' # 处理需求2:column1为空的行,用column0填充column2和column3 mask_no_col1 = data['column1'].isna() | data['column1'].str.strip().eq('') data.loc[mask_no_col1, 'column2'] = data.loc[mask_no_col1, 'column0'].apply(do_something) data.loc[mask_no_col1, 'column3'] = data.loc[mask_no_col1, 'column0'].apply(do_something)
代码解释
- mask_has_col1:生成布尔索引,标记
column1非空且非空白的行 - 通过
loc定位目标行,将column2和column3设为空值(None/空字符串按需选择) - mask_no_col1:生成布尔索引,标记
column1为空或空白的行 - 仅对这些行,调用
do_something()处理column0,填充到对应列
内容的提问来源于stack exchange,提问作者Ozar
相关产品推荐
相关产品推荐

