基于日期的随机抽样

时间:2019-04-24 14:43:01

标签: python pandas

我正在尝试根据日期随机抽样,我在这里问了类似的问题,但是在尝试将其转换为代码以根据每天相同的n来更轻松地进行操作时遇到了麻烦每天都必须写出以下功能

df[(df.date <= '2019-01-02') & (df.date >= '2019-01-01')].sample(n=3)
df[(df.date <= '2019-01-03') & (df.date >= '2019-01-02')].sample(n=3)

但是有办法做到这一点,我不必继续写日期,例如因为我每天有n = 3,我认为必须有一种更简单的方法来做到这一点,但是到处都是一直无法弄清楚。我敢肯定,我需要使用lambda来做到这一点,但是除了一天之后,还没有完全能够解决这一问题,

step=datetime.timedelta(1)

提前谢谢!

date                    random_sample
2019-01-01 00:03:15       No
2019-01-01 00:06:21       No
2019-01-01 02:00:21       No
2019-01-01 08:06:48       No
2019-01-01 10:25:37       No
2019-01-02 00:03:15       No
2019-01-02 00:06:21       No
2019-01-02 02:00:21       No
2019-01-02 08:06:48       No
2019-01-02 10:25:37       No
date                      random_sample
2019-01-01 00:03:15       Yes
2019-01-01 00:06:21       No
2019-01-01 02:00:21       Yes
2019-01-01 08:06:48       Yes
2019-01-01 10:25:37       No
2019-01-02 00:03:15       No
2019-01-02 00:06:21       Yes
2019-01-02 02:00:21       Yes
2019-01-02 08:06:48       Yes
2019-01-02 10:25:37       No

1 个答案:

答案 0 :(得分:0)

您可以使用groupby.apply并在同一日期的每组中采样3个样本。

然后,您使用numpy.where有条件地将g = df.groupby(df['date'].dt.date).apply(lambda x: x['date'].sample(n=3)).to_numpy() df['random_sample'] = np.where(df.date.isin(g), 'Yes', df['random_sample']) print(df) date random_sample 0 2019-01-01 00:03:15 Yes 1 2019-01-01 00:06:21 No 2 2019-01-01 02:00:21 No 3 2019-01-01 08:06:48 Yes 4 2019-01-01 10:25:37 Yes 5 2019-01-02 00:03:15 No 6 2019-01-02 00:06:21 Yes 7 2019-01-02 02:00:21 Yes 8 2019-01-02 08:06:48 Yes 9 2019-01-02 10:25:37 No 分配给示例中的日期:

df = df[df.date >= (pd.to_datetime('today') - pd.Timedelta(days=14))]

修改
立即过滤两周前的数据

<input id="submitButton"class="formBtn" type="submit" />
<input id="resetButton"class="formBtn" type="reset" />