You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Python/Pandas DataFrame中筛选含过期标识的软件全量记录?

筛选存在至少一条Identified=1的软件全量记录

问题场景

现有如下结构的Pandas DataFrame:

IdentifiedSoftwareVersionDate
0Microsoft Office22022-05-25
0Microsoft Office12022-03-21
0Adobe Photoshop22022-04-20
1Adobe Photoshop12021-04-04

其中Identified列通过以下代码生成(标记日期早于当前日期一年前的记录为1):

import pandas as pd
import datetime as dt

dfcheck = pd.read_csv('version-data.csv', encoding='utf8')
df = pd.DataFrame(dfcheck)

olderdata = dt.date.today() - pd.DateOffset(years=1)

df['Identified'] = (df['Date'] <= olderdata).astype(int)

需求:创建新的DataFrame,保留所有存在至少一条Identified=1的软件的全部行,预期输出如下:

IdentifiedSoftwareVersionDate
0Adobe Photoshop22022-04-20
1Adobe Photoshop12021-04-04

实现方案

方法一:使用groupby + transform

通过分组判断每个软件是否存在Identified=1的记录,再进行过滤:

# 按Software分组,判断每组是否有至少一个Identified=1的记录
has_identified = df.groupby('Software')['Identified'].transform(lambda x: x.any())

# 筛选符合条件的行
new_df = df[has_identified]

方法二:先提取目标软件列表再过滤

先找出所有存在Identified=1的软件,再用这个列表过滤原DataFrame:

# 获取所有Identified=1的软件名称,去重
target_softwares = df[df['Identified'] == 1]['Software'].unique()

# 筛选软件在目标列表中的所有行
new_df = df[df['Software'].isin(target_softwares)]

两种方法都能得到预期结果,小数据量下效率相近;大数据量时,方法二的性能通常更优。

内容的提问来源于stack exchange,提问作者Acuity

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 03:01:01