如何删除DataFrame中符合‘col3为Missing且值存在于另一列’的行?
解决DataFrame删除特定条件行的问题
没问题,我来帮你搞定这个需求!先搭个符合你描述的示例DataFrame,再一步步实现删除逻辑。
首先,构造一个和你需求匹配的样例数据:
import pandas as pd # 构造示例DataFrame,第1行(索引1)符合删除条件 data = { 'A': ['X', 'A', 'Y'], 'B': ['A,B,C', 'D,E,F', 'G,H'], 'col3': ['Valid', 'Missing', 'Missing'] } df = pd.DataFrame(data)
接下来是核心的删除逻辑:我们需要标记出col3值为"Missing"且A列的值存在于该行B列中的行,然后删掉它们。这里用apply逐行判断,再结合布尔掩码筛选:
# 生成需要删除的行的掩码 # 逻辑:col3是"Missing" 并且 当前行的A值在B列拆分后的列表里 mask = (df['col3'] == 'Missing') & df.apply(lambda row: row['A'] in row['B'].split(','), axis=1) # 保留不符合删除条件的行(对掩码取反) df = df[~mask]
如果你想直接修改原DataFrame而不是生成新对象,也可以用drop方法:
df.drop(df[mask].index, inplace=True)
额外注意点
如果你的B列内容带有空格(比如"A, B, C"),记得在拆分后去掉空格,避免判断失误:
mask = (df['col3'] == 'Missing') & df.apply( lambda row: row['A'] in [x.strip() for x in row['B'].split(',')], axis=1 )
运行完代码后,原DataFrame里符合条件的第1行就会被成功删除啦!
内容的提问来源于stack exchange,提问作者Kiran J. Mistry
相关产品推荐
相关产品推荐

