Pandas: Удалить строки год-неделя до сегодняшнего дня? - PullRequest
1 голос
/ 19 марта 2020

Я хочу удалить строки до текущей недели из моего кадра данных. Предполагаемый код не работает, так как отдельные ди git недели все еще появляются. Есть ли лучший способ?

import pandas as pd
import numpy as np
from datetime import date, datetime, timedelta

data = {
    "Year": [2019, 2020, 2020, 2020, 2020, 2020, 2020],
    "Week": [40, 8, 9, 10, 11, 12, 13]
}
df = pd.DataFrame(data)

# Current YearWeek
year_week = datetime.now().strftime("%Y/W%V")
print(year_week)

df["Year/Week"] = pd.to_datetime(
    (df["Year"].astype(str) + "/W" + df["Week"].astype(str)),
    format="%Y/W%V",
    errors="ignore")

# Drop rows that have Year-Week value less than current Year-Week
df["Exclude Rows"] = np.where(
    pd.to_datetime(
        (df["Year"].astype(str) + "/W" + df["Week"].astype(str)),
        format="%Y/W%V",
        errors="ignore",
    ) < year_week, "Yes", "No")

# Drop rows
df.drop(df.loc[df["Exclude Rows"] == "Yes"].index, inplace=True)

print(df)

Вывод, который я получаю:

   Year  Week Year/Week Exclude Rows
1  2020     8   2020/W8           No
2  2020     9   2020/W9           No
5  2020    12  2020/W12           No
6  2020    13  2020/W13           No

1 Ответ

0 голосов
/ 19 марта 2020

Вот возможное решение, вдохновленное этим ответом :

import pandas as pd
from datetime import datetime

data = {
    "Year": [2019, 2020, 2020, 2020, 2020, 2020, 2020],
    "Week": [40, 8, 9, 10, 11, 12, 13]
}
df = pd.DataFrame(data)

df = df[pd.to_datetime(df.Year.astype(str), format='%Y') + \
    pd.to_timedelta(df.Week.mul(7).astype(str) + ' days')
    > datetime.now()
]

Результат:

   Year  Week
5  2020    12
6  2020    13
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...