如果列值与列表中的所有值不匹配,如何从dataframe中删除行

2024-10-02 18:27:29 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两个列表,其中列出了上周和前一周的日期:

import pandas as pd
from datetime import timedelta
import datetime
import numpy as np
import time

today = datetime.date.today()
datesLast = [today + datetime.timedelta(days=i) for i in range(-7 - today.weekday(), -0 - today.weekday())]
datesPrevious = [today + datetime.timedelta(days=i) for i in range(-14 - today.weekday(), -7 - today.weekday())]
LastWeek = [date_obj.strftime('%d-%m-%Y') for date_obj in datesLast]
PreviousWeek = [date_obj.strftime('%d-%m-%Y') for date_obj in datesPrevious]

data = pd.read_csv("path/to/my.csv", quotechar='"')

我需要检查LastWeek列表中的所有值是否都存在于my.csv(日期列)中。如果所有值都存在,则删除日期与列表中日期不同的所有行。如果my.csv文件中不存在某些值,请检查PreviousWeek中的所有值是否存在,然后删除所有其他值与此列表中的值不同的行

my.csv

date          ID
31-08-2020    1
01-09-2020    1
02-09-2020    1
03-09-2020    1
04-09-2020    1
05-09-2020    1
06-09-2020    1
07-09-2020    1 
08-09-2020    1 
09-09-2020    1 
10-09-2020    1

上述各项的预期输出:

 date          ID
31-08-2020    1
01-09-2020    1
02-09-2020    1
03-09-2020    1
04-09-2020    1
05-09-2020    1
06-09-2020    1

Tags: csvinimportobj列表fortodaydatetime
1条回答
网友
1楼 · 发布于 2024-10-02 18:27:29

使用pandas.Series.isin

con1 = df["date"].isin(LastWeek)
if con1.all():
    print(df[con1])
else:
    con2 = df["date"].isin(PreviousWeek)
    print(df[con2])

输出:

         date  ID
0  31-08-2020   1
1  01-09-2020   1
2  02-09-2020   1
3  03-09-2020   1
4  04-09-2020   1
5  05-09-2020   1
6  06-09-2020   1

相关问题 更多 >