gpt4 book ai didi

python - 基于多个条件创建一个 Pandas Dataframe 列

转载 作者:太空宇宙 更新时间:2023-11-04 02:45:04 29 4
gpt4 key购买 nike

我正在尝试根据我的代码中显示的多个条件创建一个新列。我有一本 jp_hol 的字典,它在日本有假期,我的数据框有那个日期列,它是一个字符串,以及函数中使用的所有其他列但是我在下面收到此错误有人可以帮我找出问题

The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().

我的代码:

def flag():
if (load['date'].isin([i for i in jp_hol.keys()]) |(load['day_of_week_int']==6)):
l='holiday'
elif load['day_of_week_int'].isin([i for i in range(0,5)]):
l='weekday'
elif load['day_of_week_int']==5:
l='sat'
return l
load['flag']=load.apply(flag(),axis=1

注意:如果假期恰逢工作日,则假期应优先于工作日。

最佳答案

所有掩码创建TrueFalse 系列,因此可以使用numpy.where :

m1 = load['date'].isin([i for i in jp_hol.keys()]) | (load['day_of_week_int']==6)
m2 = load['day_of_week_int'].isin([i for i in range(0,5)])
m3 = load['day_of_week_int']==5


load['flag']=np.where(m1, 'holiday',
np.where(m2, 'weekday',
np.where(m3, 'sate', 'no match')))

示例:

load = pd.DataFrame({'A':list('abcdef'),
'B':[4,5,4,5,5,4],
'C':[7,8,9,4,2,3],
'D':[1,3,5,7,1,0],
'E':[5,3,6,9,2,4],
'F':list('aaabbb')})

print (load)
m1 = load['B'] == 5
m2 = load['C'] >5
m3 = load['F'] == 'a'

print (pd.concat([m1,m2,m3], axis=1))
B C F
0 False True True
1 True True True
2 False True True
3 True False False
4 True False False
5 False False False

load['flag']=np.where(m1, 'holiday',
np.where(m2, 'weekday',
np.where(m3, 'sate', 'no match')))

print (load)
A B C D E F flag
0 a 4 7 1 5 a weekday
1 b 5 8 3 3 a holiday
2 c 4 9 5 6 a weekday
3 d 5 4 7 9 b holiday
4 e 5 2 1 2 b holiday
5 f 4 3 0 4 b no match

关于python - 基于多个条件创建一个 Pandas Dataframe 列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45351051/

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