我想将日期时间序列转换为季节,例如,3、4、5个月我想用2(春天)替换它们;6、7、8个月我想用3(夏天)等替换它们
所以,我有这个系列
id
1 2011-08-20
2 2011-08-23
3 2011-08-27
4 2011-09-01
5 2011-09-05
6 2011-09-06
7 2011-09-08
8 2011-09-09
Name: timestamp, dtype: datetime64[ns]
这是我一直试图使用的代码,但没有用。
# Get seasons
spring = range(3, 5)
summer = range(6, 8)
fall = range(9, 11)
# winter = everything else
month = temp2.dt.month
season=[]
for _ in range(len(month)):
if any(x == spring for x in month):
season.append(2) # spring
elif any(x == summer for x in month):
season.append(3) # summer
elif any(x == fall for x in month):
season.append(4) # fall
else:
season.append(1) # winter
以及
for _ in range(len(month)):
if month[_] == 3 or month[_] == 4 or month[_] == 5:
season.append(2) # spring
elif month[_] == 6 or month[_] == 7 or month[_] == 8:
season.append(3) # summer
elif month[_] == 9 or month[_] == 10 or month[_] == 11:
season.append(4) # fall
else:
season.append(1) # winter
这两种解决方案都不起作用,特别是在第一个实现中,我收到一个错误:
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
而在第二个是一个有错误的大列表。有什么想法吗?谢谢
也可以使用字典映射。
创建一个将一个月映射到一个季节的字典:
用它把月份转换成季节
性能:比较快
我想这能行。
可以使用简单的数学公式将一个月压缩为一个季节,例如:
因此对于您的用例:
或者使用向量运算(credit@DSM):
相关问题 更多 >
编程相关推荐