Python 按日期范围切割或分组的熊猫
我有多个带有日期列的数据帧。我想按日期列按5天对这些数据帧进行分组。通常情况下,类似这样的工作:Python 按日期范围切割或分组的熊猫,python,pandas,Python,Pandas,我有多个带有日期列的数据帧。我想按日期列按5天对这些数据帧进行分组。通常情况下,类似这样的工作: df = pd.DataFrame([['2016-11-01 09:21:07', 10], ['2016-09-14 02:46:01', 21], ['2016-08-11 03:26:33', 14], ['2016-10-17 14:20:44', 14]], columns=['DateCol', 'Values']) df['DateCol'] = p
df = pd.DataFrame([['2016-11-01 09:21:07', 10], ['2016-09-14 02:46:01', 21], ['2016-08-11 03:26:33', 14], ['2016-10-17 14:20:44', 14]],
columns=['DateCol', 'Values'])
df['DateCol'] = pd.to_datetime(df['DateCol'])
df.set_index('DateCol').groupby(pd.TimeGrouper('5D')).mean()
但是,当我使用pd.TimeGrouper
时,它会根据我应用它的数据帧创建组。如果在两个不同的数据帧上执行此操作,则会生成不同的组。
我想按相同的组对多个数据帧进行分组
我试着使用了pd.cut
,但它对日期时间列不起作用pd.cut(df['DateCol'],10)
给出了类型错误
理想情况下,我想这样做:
pd.groupby(df, pd.cut(df['DateCol'], pd.date_range(start='1/1/2016', end='1/1/2017', freq='5D')))
换句话说,我需要按特定的日期范围对数据帧进行分组。基本上,您需要让所有数据帧共享同一组日期。因此,考虑在日期的不同数据框上进行外部合并,以保持所有列。外部合并将值保留在左侧和右侧联接中,并将为不在当前数据帧中的相应日期填充
NaN
。然后,运行TimeGrouper
下面将所有数据帧保存到一个列表中,该列表更易于对其运行完整操作,并避免全局环境中的多个对象:
from datetime import datetime as dt
import pandas as pd
df1 = pd.DataFrame({'DateCol': [dt.strptime(i, '%Y-%m-%d %H:%M:%S') for i in
['2016-11-01 09:21:07', '2016-09-14 02:46:01',
'2016-08-11 03:26:33', '2016-10-17 14:20:44']],
'Values': [10, 21, 14, 14]})
df2 = pd.DataFrame({'DateCol': [dt.strptime(i, '%Y-%m-%d %H:%M:%S') for i in
['2016-07-28 13:56:19', '2016-03-07 06:23:48',
'2016-09-26 05:31:10', '2016-08-03 12:02:59']],
'Values': [7, 19, 28, 36]})
dfs = [df1, df2]
alldates = pd.concat([i[['DateCol']] for i in dfs]).drop_duplicates()
for i in range(len(dfs)):
dfs[i] = dfs[i].merge(alldates, on='DateCol', how='outer')
dfs[i] = dfs[i].set_index('DateCol').groupby(pd.TimeGrouper('5D')).mean()
print(dfs[i].head())
# Values
# DateCol
# 2016-03-07 06:23:48 NaN
# 2016-03-12 06:23:48 NaN
# 2016-03-17 06:23:48 NaN
# 2016-03-22 06:23:48 NaN
# 2016-03-27 06:23:48 NaN
# Values
# DateCol
# 2016-03-07 06:23:48 19.0
# 2016-03-12 06:23:48 NaN
# 2016-03-17 06:23:48 NaN
# 2016-03-22 06:23:48 NaN
# 2016-03-27 06:23:48 NaN