gpt4 book ai didi

python - 如果单行的条件为真,则标记整个组

转载 作者:太空狗 更新时间:2023-10-29 17:16:26 26 4
gpt4 key购买 nike

我有一个包含日期和公共(public)假期的数据框

Date    WeekNum Public_Holiday
1/1/2015 1 1
2/1/2015 1 0
3/1/2015 1 0
4/1/2015 1 0
5/1/2015 1 0
6/1/2015 1 0
7/1/2015 1 0
8/1/2015 2 0
9/1/2015 2 0
10/1/2015 2 0
11/1/2015 2 0
12/1/2015 2 0
13/1/2015 2 0

我必须创建一个名为 Public_Holiday_Week 的条件列,如果该特定周有公共(public)假期,它应该返回 1

我想看到这样的输出

Date    WeekNum Public_Holiday  Public_Holiday_Week
1/1/2015 1 1 1
2/1/2015 1 0 1
3/1/2015 1 0 1
4/1/2015 1 0 1
5/1/2015 1 0 1
6/1/2015 1 0 1
7/1/2015 1 0 1
8/1/2015 2 0 0
9/1/2015 2 0 0
10/1/2015 2 0 0
11/1/2015 2 0 0
12/1/2015 2 0 0
13/1/2015 2 0 0

我尝试使用 np.where

df['Public_Holiday_Week'] = np.where(df['Public_Holiday']==1,1,0)

但是当它不是公众假期时,它适用于一周中的其他日子。

我必须在这里申请滚动吗?感谢您的帮助

最佳答案

为了提高性能,不要使用 groupby,而是获取所有 WeekNum 至少有一个 1,然后通过 isin 选择值, 最后将 bool 掩码转换为 ints:

weeks = df.loc[df['Public_Holiday'].eq(1), 'WeekNum']
df['Public_Holiday_Week'] = df['WeekNum'].isin(weeks).astype(int)

print (df)
Date WeekNum Public_Holiday Public_Holiday_Week
0 1/1/2015 1 1 1
1 2/1/2015 1 0 1
2 3/1/2015 1 0 1
3 4/1/2015 1 0 1
4 5/1/2015 1 0 1
5 6/1/2015 1 0 1
6 7/1/2015 1 0 1
7 8/1/2015 2 0 0
8 9/1/2015 2 0 0
9 10/1/2015 2 0 0
10 11/1/2015 2 0 0
11 12/1/2015 2 0 0
12 13/1/2015 2 0 0

正如@Mohamed Thasin 指出的那样,如果有必要,可以按周分组,但随后会得到不同的输出,因为不同 week数字:

df['weeks'] = pd.to_datetime(df['Date'], dayfirst=True).dt.week

weeks = df.loc[df['Public_Holiday'].eq(1), 'weeks']
df['Public_Holiday_Week'] = df['weeks'].isin(weeks).astype(int)
print (df)
Date WeekNum Public_Holiday weeks Public_Holiday_Week
0 1/1/2015 1 1 1 1
1 2/1/2015 1 0 1 1
2 3/1/2015 1 0 1 1
3 4/1/2015 1 0 1 1
4 5/1/2015 1 0 2 0
5 6/1/2015 1 0 2 0
6 7/1/2015 1 0 2 0
7 8/1/2015 2 0 2 0
8 9/1/2015 2 0 2 0
9 10/1/2015 2 0 2 0
10 11/1/2015 2 0 2 0
11 12/1/2015 2 0 3 0
12 13/1/2015 2 0 3 0

关于python - 如果单行的条件为真,则标记整个组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51016638/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com