【问题标题】:Pandas: Remove Year-Week rows before today?Pandas:删除今天之前的年-周行?
【发布时间】:2020-06-30 03:39:38
【问题描述】:

我想从我的数据框中删除本周之前的行。但是,预期的代码不起作用,因为仍然显示了个位数的周数。有没有更好的办法?

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

【问题讨论】:

    标签: python pandas dataframe datetime


    【解决方案1】:

    这是一个可能的解决方案,灵感来自this answer

    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
    

    【讨论】:

      猜你喜欢
      • 2017-11-24
      • 2022-08-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-12
      • 1970-01-01
      • 2010-10-24
      相关资源
      最近更新 更多