在 Python 中将数据帧拆分为多个 5 秒数据帧
Spliting a dataframe into multiple 5-second dataframes in Python
我有一个相对较大的数据集,我想根据包含日期时间对象的列将其拆分为 Python 中的多个数据帧。列中的值(我想分割数据框的依据)按以下格式给出:
2015-11-01 00:00:05
You may assume the dataframe looks like this.
如何按以下方式将数据帧拆分为 5 秒间隔:
第一个数据帧2015-11-01 00:00:00 - 2015-11-01 00:00:05
,
第二个数据帧2015-11-01 00:00:05 - 2015-11-01 00:00:10
,依此类推。
我还需要计算每个结果数据帧中的观察数量。换句话说,如果我能得到另一个包含 2 列的数据框,那就太好了:第 1 列代表拆分组(此列的值无关紧要:它们可以只是 1、2、3,.. 表示顺序5 秒间隔),第 2 列显示属于各个间隔的观察数
我认为存储多个 DataFrame
s 的最佳方法是 dict
:
rng = pd.date_range('2015-11-01 00:00:00', periods=100, freq='S')
df = pd.DataFrame({'Date': rng, 'a': range(100)})
print (df.head(10))
Date a
0 2015-11-01 00:00:00 0
1 2015-11-01 00:00:01 1
2 2015-11-01 00:00:02 2
3 2015-11-01 00:00:03 3
4 2015-11-01 00:00:04 4
5 2015-11-01 00:00:05 5
6 2015-11-01 00:00:06 6
7 2015-11-01 00:00:07 7
8 2015-11-01 00:00:08 8
9 2015-11-01 00:00:09 9
dfs={k.strftime('%Y-%m-%d %H:%M:%S'):v for k,v in
df.groupby(pd.Grouper(key='Date', freq='5S'))}
print (dfs['2015-11-01 00:00:00'])
Date a
0 2015-11-01 00:00:00 0
1 2015-11-01 00:00:01 1
2 2015-11-01 00:00:02 2
3 2015-11-01 00:00:03 3
4 2015-11-01 00:00:04 4
print (dfs['2015-11-01 00:00:05'])
Date a
5 2015-11-01 00:00:05 5
6 2015-11-01 00:00:06 6
7 2015-11-01 00:00:07 7
8 2015-11-01 00:00:08 8
9 2015-11-01 00:00:09 9
您可以按 5s
Date
列的楼层分组
f = '{:%Y-%m-%d %H:%M:%S}'.format
dfs = {f(k): g for k, g in df.groupby(df.Date.dt.floor('5s'))}
我有一个相对较大的数据集,我想根据包含日期时间对象的列将其拆分为 Python 中的多个数据帧。列中的值(我想分割数据框的依据)按以下格式给出:
2015-11-01 00:00:05
You may assume the dataframe looks like this.
如何按以下方式将数据帧拆分为 5 秒间隔:
第一个数据帧
2015-11-01 00:00:00 - 2015-11-01 00:00:05
,第二个数据帧
2015-11-01 00:00:05 - 2015-11-01 00:00:10
,依此类推。
我还需要计算每个结果数据帧中的观察数量。换句话说,如果我能得到另一个包含 2 列的数据框,那就太好了:第 1 列代表拆分组(此列的值无关紧要:它们可以只是 1、2、3,.. 表示顺序5 秒间隔),第 2 列显示属于各个间隔的观察数
我认为存储多个 DataFrame
s 的最佳方法是 dict
:
rng = pd.date_range('2015-11-01 00:00:00', periods=100, freq='S')
df = pd.DataFrame({'Date': rng, 'a': range(100)})
print (df.head(10))
Date a
0 2015-11-01 00:00:00 0
1 2015-11-01 00:00:01 1
2 2015-11-01 00:00:02 2
3 2015-11-01 00:00:03 3
4 2015-11-01 00:00:04 4
5 2015-11-01 00:00:05 5
6 2015-11-01 00:00:06 6
7 2015-11-01 00:00:07 7
8 2015-11-01 00:00:08 8
9 2015-11-01 00:00:09 9
dfs={k.strftime('%Y-%m-%d %H:%M:%S'):v for k,v in
df.groupby(pd.Grouper(key='Date', freq='5S'))}
print (dfs['2015-11-01 00:00:00'])
Date a
0 2015-11-01 00:00:00 0
1 2015-11-01 00:00:01 1
2 2015-11-01 00:00:02 2
3 2015-11-01 00:00:03 3
4 2015-11-01 00:00:04 4
print (dfs['2015-11-01 00:00:05'])
Date a
5 2015-11-01 00:00:05 5
6 2015-11-01 00:00:06 6
7 2015-11-01 00:00:07 7
8 2015-11-01 00:00:08 8
9 2015-11-01 00:00:09 9
您可以按 5s
Date
列的楼层分组
f = '{:%Y-%m-%d %H:%M:%S}'.format
dfs = {f(k): g for k, g in df.groupby(df.Date.dt.floor('5s'))}