如何用Pandas筛选出包含指定Type数组所有元素的日期数据?
筛选包含指定所有Type元素的日期数据
核心需求
从给定的DataFrame中,仅保留那些日期对应的Type列包含[3,4,5]所有元素的行,最终结果只保留2024-03-12和2024-03-13的记录。
实现步骤
由于原DataFrame的Date列存在格式不统一(如2024-03-11和2024-3-11),首先需要统一日期格式,避免分组时误判为不同日期;再通过分组筛选出符合条件的日期,最后过滤原数据。
完整代码
import pandas as pd # 构造原DataFrame data = { 'Date': ['2024-03-11', '2024-3-11', '2024-03-12', '2024-3-12', '2024-3-12', '2024-03-13', '2024-3-13', '2024-3-13', '2024-3-14'], 'Type': [3, 4, 3, 4, 5, 3, 4, 5, 5], 'Value': [3, 5, 3, 5, 5, 3, 5, 2, 5] } df = pd.DataFrame(data) # 1. 统一日期格式(转成标准日期对象,消除格式差异) df['Date'] = pd.to_datetime(df['Date']).dt.date # 2. 定义目标Type集合 target_types = {3, 4, 5} # 3. 分组筛选:找出包含所有目标Type的日期 valid_dates = df.groupby('Date')['Type']\ .apply(lambda group: target_types.issubset(group))\ .loc[lambda x: x].index # 4. 过滤原DataFrame,得到结果 result_df = df[df['Date'].isin(valid_dates)] print(result_df)
代码说明
- 统一日期格式:用
pd.to_datetime将日期转成datetime类型后提取date对象,确保不同格式的同日期被识别为同一分组键。 - 分组检查:通过
groupby('Date')按日期分组,用issubset方法判断该日期的Type是否包含所有目标值(集合操作比计数更直接准确,无需考虑重复值)。 - 过滤数据:用筛选出的有效日期,通过
isin方法过滤原DataFrame,得到最终结果。
内容的提问来源于stack exchange,提问作者tkansara
相关产品推荐
相关产品推荐

