Python 3.x Python If Int介于两个值之间,结果不正确
我有一个熊猫数据框,如下所示Python 3.x Python If Int介于两个值之间,结果不正确,python-3.x,pandas,Python 3.x,Pandas,我有一个熊猫数据框,如下所示 df = pd.DataFrame({'A' : ['foo', 'bar', 'foo', 'bar','foo', 'bar', 'foo', 'foo'], 'seconds' : [21,200,300,400,500,600,700,800]}) I am trying to create buckets based on minutes as below, def create_bucket(seconds
df = pd.DataFrame({'A' : ['foo', 'bar', 'foo', 'bar','foo', 'bar', 'foo', 'foo'],
'seconds' : [21,200,300,400,500,600,700,800]})
I am trying to create buckets based on minutes as below,
def create_bucket(seconds):
#row['seconds'], buckets- 5,10,15,20,25,30,>30
if [(seconds >= 0) & (seconds <= 300)]:
result = "5"
elif [(seconds >= 301) & (seconds <= 600)]:
result = "10"
elif [(seconds >= 601) & (seconds <= 900)]:
result = "15"
elif [(seconds >= 901) & (seconds <= 1200)]:
result = "20"
elif [(seconds >= 1201) & (seconds <= 1500)]:
result = "25"
elif [(seconds >= 1501) & (seconds <= 1800)]:
result = "30"
else:
result = ">30"
return result
df['Bucket'] = df.apply(lambda row: create_bucket(df['seconds']), axis=1)
if
条件句周围不应该有方括号。当你把它们放在那里,而不是True
或False
,你最终得到的列表是:[True]
或[False]
,两者的计算结果都是True
,因为非空列表总是真实的。另外,和
是按位AND,但您需要逻辑AND,因此请改用和
。提示:如果[False]:打印(“测试”),请尝试运行。如果[False]或[True]条件提供相同的结果,则替换第一次检查-打印测试。数据类型为int32秒,因此似乎不是类型不匹配。很难理解。唉,你不明白这个暗示,所以我会发布一个详细的解释。再次感谢约瑟夫。我最初是这样做的,但我得到了下面的错误,对不起。我收到的错误是,ValueError:(“序列的真值不明确。请使用a.empty、a.bool()、a.item()、a.any()或a.all().,“发生在索引0处”)我早些时候收到了这个错误,为了解决post()中提到的这个错误,我添加了位括号和方括号,正如您所指出的那样,这导致了逻辑问题。试图找出最好的方法来让这个逻辑继续下去。
A seconds Bucket
0 foo 21 5
1 bar 200 5
2 foo 300 5
3 bar 400 5
4 foo 500 5
5 bar 600 5
6 foo 700 5
7 foo 800 5