我有一个看起来像这样的数据框:
Date Day
1 y-m-d MON
2 y-m-d TUE
3 y-m-d WED
...
您可以使用以下内容重新创建:
dict_weekday = {1: 'MON', 2: 'TUE', 3: 'WED', 4: 'THU', 5: 'FRI', 6: 'SAT', 7: 'SUN'}
df = pd.DataFrame(pd.date_range(datetime.date(2018, 1, 1),
datetime.date(2019, 1, 1), freq='D'), columns=['Date'])
df['Day'] = df['Date'].apply(lambda x: dict_weekday[x.isoweekday()])
如何创建一个新列,该列使用np.random.poisson(30)
MON-FRI
,然后对np.random.poisson(1)
SAT
&
使用SUN
?
截至目前,我正尝试使用np.select
执行条件和选择:
conditions = [
(df['Day'] == 'SAT'),
(df['Day'] == 'SUN')
]
choices = [np.random.poisson(1), np.random.poisson(1)] #I wish this part was cleaner
for index, row in df.iterrows():
df['New'] = np.select(conditions, choices, default = np.random.poisson(30)
上面的代码来自另一篇文章:
Pandas conditional creation of a series/dataframe column
...并且它非常接近,但是我不知道如何在遍历时保持索引的完整性,我想这是问题所在(?)。这就是我得到的:
Date Day New
1 y-m-d MON 34
2 y-m-d TUE 34
3 y-m-d WED 34
...
6 y-m-d SAT 2
7 y-m-d SUN 1
8 y-m-d MON 34
9 y-m-d TUE 34
10 y-m-d WED 34
我希望New
是从泊松分布中随机生成的数字数组。星期一至星期五遵循相同的分布,但是星期六和星期日的数量要少得多。我想我理解为什么我的代码没有模拟我想要的东西,但是我没有经验去知道如何解决它。
我也考虑过完全淘汰日期,只是按照我想使用的顺序构建一个数组,使用中断并在循环中继续进行,但是我一直找不到适合我情况的可复制示例。
希望所有这些都是有道理的...这是我的第一篇文章,因此,如果我不遵循最佳实践,我要提前道歉。