如何基于一个dataframe的Tweet列值删除另一个dataframe的对应行
解决方案
你可以通过Pandas的内置方法快速完成需求,具体实现如下:
方法1:布尔索引法(推荐,效率最高)
# 提取df1的所有Tweet内容转为集合,大幅提升大样本下的查询效率 df1_tweet_set = set(df1['Tweet']) # 过滤df2中Tweet不在df1集合内的行,重置索引后赋值给新的df2 df2 = df2[~df2['Tweet'].isin(df1_tweet_set)].reset_index(drop=True)
说明:
isin()方法会返回和df2行数一致的布尔序列,标识当前行的Tweet值是否存在于传入的df1 Tweet集合中~是Pandas的布尔取反运算符,取反后就得到所有未在df1中出现过的Tweet对应的行- 末尾的
reset_index(drop=True)用于重置筛选后的数据框行索引,不需要可以删除
方法2:表关联法
如果你更习惯用表关联逻辑处理,也可以用左连接实现:
# 给df1增加标记列,标识该Tweet存在于df1中 df1['exist_flag'] = True # df2和df1的Tweet列做左连接 df2 = df2.merge(df1[['Tweet', 'exist_flag']], on='Tweet', how='left') # 筛选标记列为空的行(即未在df1中出现),删除标记列后重置索引 df2 = df2[df2['exist_flag'].isna()].drop('exist_flag', axis=1).reset_index(drop=True)
内容的提问来源于stack exchange,提问作者coding
相关产品推荐
相关产品推荐

