我正在尝试根据日期随机抽样,我在这里问了类似的问题,但是在尝试将其转换为代码以根据每天相同的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
答案 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" />