Pandas:使用np.哪里()?

2024-04-27 12:53:55 发布

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

给定以下数据集,并且当前周为2019/W37,如何使用np.where删除当前周之前的行?你知道吗

   Year  Week  Value
0  2019    31     10
1  2019    32     20
2  2019    33     30
3  2019    34     40
4  2019    35     50
5  2019    36     60
6  2019    37     70
7  2019    38     80
8  2019    39     90
9  2019    40    100

我尝试了以下方法:

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

data = {
    "Year": [2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019],
    "Week": [31, 32, 33, 34, 35, 36, 37, 38, 39, 40],
    "Value": [10, 20, 30, 40, 50, 60, 70, 80, 90, 100]
}

df = pd.DataFrame(data)
print(df)

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

df["Exclude"] = np.where(str(df["Year"] + "/" + df["Week"]) < YearWeek, "Yes", "No")
print(df)

Tags: 数据importdfdatadatetimevalueasnp
3条回答

试试这个:

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

或使用np.哪里()

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

要生成排除列:

df['exclude'] = np.where(pd.to_datetime((df["Year"].astype(str) + "/W" + df["Week"].astype(str)), format="%Y/W%V", errors='ignore') < YearWeek, 'Yes', 'No' )

您可以使用十进制星期制:

w = df['Year'] + df['Week'] / 54

now = pd.Timestamp.now()
this_week = now.year + now.week / 54

df[w >= this_week]

结果

   Year  Week  Value
6  2019    37     70
7  2019    38     80
8  2019    39     90
9  2019    40    100

ISO Date System中,一年最多可以有53周,因此我们使用54来防止N年的最后一周出现在N+1年中。任何超过54岁的都可以。这只是我们将一年和一周合并成一个单一的、可比较的数量的一种方法。你知道吗

>>> print(df)
   Year  Week  Value
0  2019    31     10
1  2019    32     20
2  2019    33     30
3  2019    34     40
4  2019    35     50
5  2019    36     60
6  2019    37     70
7  2019    38     80
8  2019    39     90
9  2019    40    100
>>> today = pd.to_datetime('today')
>>> today
Timestamp('2019-09-12 22:54:46.039542')
>>> df[(df.Week < today.week) | (df.Year < today.year)]
   Year  Week  Value
0  2019    31     10
1  2019    32     20
2  2019    33     30
3  2019    34     40
4  2019    35     50
5  2019    36     60

相关问题 更多 >