3 回答

TA贡献1785条经验 获得超4个赞
其他解决方案解决了您的问题,但实际上对于这种类型的计算,您应该使用.map或pd.cut
样本数据:
import numpy as np
import pandas as pd
df = pd.DataFrame({'Month': np.random.randint(1,13,10)})
.map
d = {1:1, 2:1, 3:2, 4:2, 5:3, 6:4, 7:5, 8:5, 9:6, 10:6, 11:7, 12:7}
df['Mapped'] = df.Month.map(d)
# Month Mapped
#0 3 2
#1 3 2
#2 7 5
#3 2 1
#4 4 2
#5 11 7
#6 12 7
#7 10 6
#8 7 5
#9 2 3
pd.cut
bins = [0,2,4,5,6,8,10,12] # Right edges
labels= [1,2,3,4,5,6,7]
df['Cut'] = pd.cut(df.Month, bins=bins, labels=labels)
# If want integer labels
# df['Cut'] = pd.cut(df.Month, bins=bins, labels=False)+1
# Month Mapped Cut
#0 3 2 2
#1 3 2 2
#2 7 5 5
#3 2 1 1
#4 4 2 2
#5 11 7 7
#6 12 7 7
#7 10 6 6
#8 7 5 5
#9 2 1 1

TA贡献1811条经验 获得超6个赞
在每个 if 语句中,您目前只将 x 与一个数字进行比较。例如,在第一个中,您说“如果 x 为 1,或者如果 2 为真”。一个数字每次都会返回 True,因此即使 x 可能不是 1,您仍然每次都会返回 1,因为 2 将始终为真。
看来你要做的是——
if x == 1 or x == 2
return 1
等等。
添加回答
举报