我有一个收集了很多天的数据集,并按日历日进行了索引。每天都有不同数量的条目。我想查看奇数天(例如,第1天,第3天,第5天等)是否与偶数天(例如,第2天,第4天,第6天等)相关联,我必须将数据集一分为二。
我无法使用第%2天,因为我错过了几天和周末,因此无法继续使用。我已经尝试过使用这样的重采样:
df_odd = df.resample('2D')
lowest_date = df['date_minus_time'].min()
df_even = df.query('date_minus_time != @lowest_date).resample('2D')
但是这坚持每天汇总数据。我想保留所有行,以便对结果数据集执行进一步的操作(例如groupby)。
如何创建两个数据框,一个数据行的所有行均带有“偶数”日期,而所有行的数据均带有“奇数”日期,而偶数和奇数相对于数据集的第一天呢?
以下是一些示例数据:
Date var
2018-12-10 1
2018-12-10 0
2018-12-10 1
2018-12-10 0
2018-12-11 1
2018-12-11 1
2018-12-12 0
2018-12-12 1
2018-12-12 1
2018-12-14 1
2018-12-14 0
2018-12-14 1
2018-12-16 1
2018-12-16 1
2018-12-16 1
预期输出:
df_odd:
Date var
2018-12-10 1
2018-12-10 0
2018-12-10 1
2018-12-10 0
2018-12-12 0
2018-12-12 1
2018-12-12 1
2018-12-16 1
2018-12-16 1
2018-12-16 1
df_even:
Date var
2018-12-11 1
2018-12-11 1
2018-12-14 1
2018-12-14 0
2018-12-14 1
答案 0 :(得分:1)
将pd.Categorical
与.codes
一起使用
num = pd.Categorical(df.Date).codes + 1
df_odd = df[num%2 == 0]
df_even = df[num%2 == 1]
df_odd
Date var
0 2018-12-10 1
1 2018-12-10 0
2 2018-12-10 1
3 2018-12-10 0
6 2018-12-12 0
7 2018-12-12 1
8 2018-12-12 1
12 2018-12-16 1
13 2018-12-16 1
14 2018-12-16 1
df_even
Date var
4 2018-12-11 1
5 2018-12-11 1
9 2018-12-14 1
10 2018-12-14 0
11 2018-12-14 1