我有一个带有不同列(例如价格,id,产品和日期)的数据框,我需要根据系统的当前日期将此数据框分为几个数据框(current_date = np.datetime64(date.today()) ))。
例如,如果今天是2020-02-07,我想将主数据帧分为三个不同的数据帧,其中df1将是上个月的数据(2020-01-07至2020-02-07的数据) ,则df2将是最近三个月的数据(不包括df1中已存在的月份,因此更准确地说是从2019-10-07到2020-01-07),而df3将是原始数据帧上剩余的数据
有一些简单的方法可以做到这一点吗?另外,我一直在尝试使用Grouper,但是我还是反复出现此错误:NameError:未定义名称“ Grouper”(我的Pandas版本是0.24.2)
答案 0 :(得分:1)
您可以将offsets.DateOffset
用于最近1个月和3个月的日期时间,并按boolean indexing
进行过滤:
test('should call notifyListeners', () async {
Foo foo = Foo();
expect(foo.i, 0);
bool result = await expectNotifyListenerCalls(
foo,
foo.increment2,
(Foo foo) => foo.i,
<dynamic>[isA<int>(), 2]);
expect(result, true);
});
rng = pd.date_range('2019-10-10', periods=20, freq='5d')
df = pd.DataFrame({'date': rng, 'id': range(20)})
print (df)
date id
0 2019-10-10 0
1 2019-10-15 1
2 2019-10-20 2
3 2019-10-25 3
4 2019-10-30 4
5 2019-11-04 5
6 2019-11-09 6
7 2019-11-14 7
8 2019-11-19 8
9 2019-11-24 9
10 2019-11-29 10
11 2019-12-04 11
12 2019-12-09 12
13 2019-12-14 13
14 2019-12-19 14
15 2019-12-24 15
16 2019-12-29 16
17 2020-01-03 17
18 2020-01-08 18
19 2020-01-13 19
current_date = pd.to_datetime('now').floor('d')
print (current_date)
2020-02-07 00:00:00
last1m = current_date - pd.DateOffset(months=1)
last3m = current_date - pd.DateOffset(months=3)
m1 = (df['date'] > last1m) & (df['date'] <= current_date)
m2 = (df['date'] > last3m) & (df['date'] <= last1m)
#filter non match m1 or m2 masks
m3 = ~(m1 | m2)
df1 = df[m1]
df2 = df[m2]
df3 = df[m3]