pandas dataframe中按条件删除dates列列表内指定元素的实现方法
实现方法
你可以通过按行遍历过滤列表元素实现需求,两种常用实现方式如下:
方法1:基于apply实现(写法简单,适合中小数据量)
# 筛选满足月份相等的行掩码 mask = df['joined_month'] == df['current_month'] # 对符合条件的行过滤dates列表,只保留大于等于joined_day的元素 df.loc[mask, 'dates'] = df[mask].apply( lambda row: [date for date in row['dates'] if date >= row['joined_day']], axis=1 )
如果需要把joined_day列重命名为你预期结果里的day,额外加一行代码即可:
df.rename(columns={'joined_day': 'day'}, inplace=True)
方法2:基于列表推导式实现(效率更高,适合百万级以上大数据量)
df['dates'] = [ [d for d in dates if d >= joined_day] if joined_month == current_month else dates for dates, joined_day, joined_month, current_month in zip(df['dates'], df['joined_day'], df['joined_month'], df['current_month']) ]
两种方法执行后都可以得到你给出的预期结果,对于空列表、所有元素都小于joined_day的场景也能正常兼容。
内容的提问来源于stack exchange,提问作者aristotle11
相关产品推荐
相关产品推荐

