如何在Pandas DataFrame中筛选跨日期重复的Temp记录
解决Pandas中筛选跨日期重复Temp记录的问题
需求说明
需要从DataFrame中筛选出同一Temp值对应多个不同Date的所有记录,排除两类数据:
- 仅在单个Date内重复的Temp条目(比如示例中的Temp=50,只出现在2023/1/2)
- 唯一值的Temp(示例中无此类数据)
示例数据
import pandas as pd df = pd.DataFrame({ 'Date': ['2023/1/1', '2023/1/1', '2023/1/2', '2023/1/2', '2023/1/2'], 'Hour': ['0600', '1800', '0600', '1200', '1800'], 'Temp': [40, 40, 40, 50, 50] })
问题分析
你之前的代码逻辑偏差:df.duplicated(subset=['Date','Temp'], keep=False)会标记所有同一Date+Temp组合下的重复行,取反后只能保留单个Date内唯一的Temp行,完全不符合需求。
正确解决方案
用groupby结合transform计算每个Temp对应的不同Date数量,再筛选出数量≥2的Temp的所有记录,这种方法效率高,适配大数据量:
# 计算每个Temp对应的不同Date数量,广播到每一行 temp_date_count = df.groupby('Temp')['Date'].transform('nunique') # 筛选出对应多个不同Date的Temp记录 result = df[temp_date_count >= 2]
运行后得到期望结果:
Date Hour Temp 0 2023/1/1 0600 40 1 2023/1/1 1800 40 2 2023/1/2 0600 40
原理说明
groupby('Temp')['Date'].transform('nunique'):按Temp分组,计算每组内不同Date的数量,再将该数量映射到原DataFrame的每一行,生成和原表长度一致的Seriestemp_date_count >=2:精准筛选出那些跨多个Date出现的Temp的所有关联记录,完全匹配需求
内容的提问来源于stack exchange,提问作者Keethan
相关产品推荐
相关产品推荐

