这是“ ISO第53周的问题”.
我有一个pandas Series实例,其索引值表示ISO周编号:
import pandas as pd
ts = pd.Series([1,1,2,3,2],index=[1,52,53,53])
我想将所有index = 53索引随机且均等地替换为index = 52或index = 1.
对于上述情况,可能是:
import pandas as pd
ts = pd.Series([1,1])
要么
import pandas as pd
ts = pd.Series([1,52])
例如.请问我该怎么做?
谢谢你的帮助.
编辑
在numpy中,我使用以下方法实现了这一点:
from numpy import where
from numpy.random import shuffle
indices = where(timestamps == 53)[0]
number_of_indices = len(indices)
if number_of_indices == 0:
return # no iso week number 53 to fix.
shuffle(indices) # randomly shuffle the indices.
midway_index = number_of_indices // 2
timestamps[indices[midway_index:]] = 52 # precedence if only 1 timestamp.
timestamps[indices[: midway_index]] = 1
其中timestamps数组是熊猫索引值.
最佳答案
如果我对您的理解正确,则列表理解应该可以:
ts = pd.Series([1,53])
ts.index = [i if i != 53 else np.random.choice([1,52]) for i in ts.index]
1 1
1 1
2 1
2 2
52 3
52 1
1 2
dtype: int64
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。