每隔一天拆分一次数据集

时间:2019-04-21 18:46:28

标签: pandas

我有一个收集了很多天的数据集,并按日历日进行了索引。每天都有不同数量的条目。我想查看奇数天(例如,第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

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