我正在尝试对数据帧进行子集化,如下所示:-
如果数据框的“ time_col”列中的条目如下:
# 00:00:00, 00:10:00,16:14:00, 22:59:00, 01:00:00, 04:14:00, 08:18:00, 18:18:00
然后我们需要创建2个数据帧,因为上面的时间表示 2天。
# data_frame_1 -> 00:00:00, 00:10:00,16:14:00, 22:59:00
# data_frame_2 -> 01:00:00, 04:14:00, 08:18:00, 18:18:00
我有一个时间序列数据和按时间顺序排列的时间,但是在时间23:59:00之后,它又从00:00:00开始,但是是第二天。
简单来说,如果df中的一列具有如下值,且最低和最高值为0和9:-
#1,2,3,4,5,6,7,8,9,4,5,6,7,8,1,2,4,5,8
所以,我想将df过滤到以下多个数据帧中:-
#df1<- 1,2,3,4,5,6,7,8,9
#df2<- 4,5,6,7,8
#df3<- 1,2,4,5,8
我想让它变得动态。我的意思是,无论是3天还是30天,这两种情况都应该起作用。
答案 0 :(得分:1)
IIUC
s=pd.Series([1,2,3,4,5,6,7,8,9,4,5,6,7,8,1,2,4,5,8])
s.groupby(s.diff().lt(0).cumsum()).apply(list)
Out[115]:
0 [1, 2, 3, 4, 5, 6, 7, 8, 9]
1 [4, 5, 6, 7, 8]
2 [1, 2, 4, 5, 8]
dtype: object
答案 1 :(得分:0)
对于df
:
times
0 00:00:00
1 00:10:00
2 16:14:00
3 22:59:00
4 01:00:00
5 04:14:00
6 08:18:00
7 18:18:00
您可以按照以下两个步骤进行操作:
df['times'] = pd.to_datetime(df.times)
df['group_label'] = df.groupby(df.times.diff().dt.days.cumsum().fillna(0)).grouper.group_info[0]
df['times'] = df.times.dt.time
list_dfs = [df.loc[df.group_label==x].drop('group_label',1) for x in df.group_label.unique()]
输出:
[0 00:00:00
1 00:10:00
2 16:14:00
3 22:59:00
Name: times, dtype: object,
4 01:00:00
5 04:14:00
6 08:18:00
7 18:18:00
Name: times, dtype: object]
您可以通过
访问该列表 list_dfs[0]
times
0 00:00:00
1 00:10:00
2 16:14:00
3 22:59:00
list_dfs[1]
times
4 01:00:00
5 04:14:00
6 08:18:00
7 18:18:00