【发布时间】:2026-01-17 14:25:01
【问题描述】:
我有一个如下所示的 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):
#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)
我得到的结果是所有值都是 5。我试图找出函数 create_bucket 有什么问题。任何帮助将不胜感激。
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
【问题讨论】:
-
提示:尝试运行
if [False]: print("test") -
感谢约瑟夫。将第一个检查替换为 if [False] 或 if [True] 条件提供相同的结果 - 打印出测试。 dtype 是 int32 秒,因此似乎不是类型不匹配。无法弄清楚这一点。
-
哎呀,你没看懂提示,所以我会发布一个答案来详细解释它。
标签: python-3.x pandas