如何筛选dataframeAudio:仅保留与dataframeHandRight匹配的Recording+Timestamp行?
过滤DataFrame中多列组合匹配的行
针对你的需求,这里提供两种高效的Pandas实现方法,仅保留dataframeAudio中Recording和Timestamp组合在dataframeHandRight里存在的行:
方法1:内连接(Merge)
通过提取手部数据的匹配列,与音频数据做内连接,自动过滤掉不匹配的行:
# 提取手部数据中用于匹配的唯一组合列 hand_matches = dataframeHandRight[['Recording', 'Timestamp']].drop_duplicates() # 内连接过滤音频数据,仅保留两边都存在的行 filtered_audio = dataframeAudio.merge(hand_matches, on=['Recording', 'Timestamp'], how='inner')
drop_duplicates()用来避免手部数据中重复组合导致音频数据被重复匹配how='inner'是内连接的核心,只保留两表共有的行
方法2:元组匹配(isin)
将两列的组合转换成元组,直接用isin判断是否存在:
# 把手部数据的两列组合转为元组列表 valid_combinations = list(dataframeHandRight[['Recording', 'Timestamp']].itertuples(index=False, name=None)) # 过滤音频数据,仅保留组合存在的行 filtered_audio = dataframeAudio[dataframeAudio[['Recording', 'Timestamp']].apply(tuple, axis=1).isin(valid_combinations)]
itertuples(index=False, name=None)快速把每行转为无索引的元组apply(tuple, axis=1)将音频数据的每行两列转为元组,再用isin匹配
注意事项
- 确保两表中
Recording和Timestamp的数据类型完全一致(比如一个是字符串、一个是数值会匹配失败) - 如果列名不同,需要先重命名对齐(比如
dataframeAudio.rename(columns={'RecID': 'Recording'}, inplace=True))
内容的提问来源于stack exchange,提问作者RomainP
相关产品推荐
相关产品推荐

