根据数据帧内的一组条件生成两个不同的随机样本

时间:2018-09-14 23:40:17

标签: python pandas numpy

我有一个看起来像这样的数据框:

      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是从泊松分布中随机生成的数字数组。星期一至星期五遵循相同的分布,但是星期六和星期日的数量要少得多。我想我理解为什么我的代码没有模拟我想要的东西,但是我没有经验去知道如何解决它。

我也考虑过完全淘汰日期,只是按照我想使用的顺序构建一个数组,使用中断并在循环中继续进行,但是我一直找不到适合我情况的可复制示例。

希望所有这些都是有道理的...这是我的第一篇文章,因此,如果我不遵循最佳实践,我要提前道歉。

0 个答案:

没有答案