pandas - 如何创建具有不同时期索引的数据框
问题描述
我有一个数据框,每一行代表一个由 pbs 生成的记录。现在我想知道每个时间段(30 分钟)的运行核心。我的表的前 4 行:
datetime walltime ncores
2019-07-18 11:18:27 2:05:10 2
2019-07-18 11:18:45 00:50:27 1
2019-07-18 11:18:46 00:07:20 1
2019-07-18 11:18:50 00:31:34 1
我发现不可能用(每条记录中的 used-walltime 不一致)的PeriodIndex
元素。Peroid
我想我可以创建一个PeriodIndex
频率为 的30 minutes
,然后将一个 certian 中所有记录的核心数分配给Period
对应的Period
. 但我无法弄清楚如何做到这一点。
我的预期是:
datetime cputime ncores
2019-07-18 11:0:00 5
2019-07-18 11:30:00 4
2019-07-18 12:00:00 3
2019-07-18 12:30:00 2
解决方案
我认为你需要:
#convert to datetimes and timedeltas
df['datetime'] = pd.to_datetime(df['datetime'])
df['walltime'] = pd.to_timedelta(df['walltime'])
#create end time with flooring by 30min
df['end'] = df['datetime'].dt.floor('30min') + df['walltime']
#list by 30minutes period
zipped = zip(df['datetime'], df['end'], df['ncores'])
L = [(i, n) for s, e, n in zipped for i in pd.period_range(s, e, freq='30min')]
#DataFrame is aggregated by sum
df1 = (pd.DataFrame(L, columns=['datetime cputime', 'summed'])
.groupby('datetime cputime', as_index=False)['summed']
.sum())
print (df1)
datetime cputime summed
0 2019-07-18 11:00 5
1 2019-07-18 11:30 4
2 2019-07-18 12:00 3
3 2019-07-18 12:30 2
4 2019-07-18 13:00 2
推荐阅读
- flask - 我想让我的单租户前夕应用程序多租户,也许使用烧瓶登录
- arrays - Firebase 数据库如何分页?
- c# - 为什么我的控制台应用程序底部总是有一个空行?
- python - 获取用零填充列表的所有排列
- microsoft-graph-api - 如何在图表中获取用户的时区
- .net-core - 是否可以将 .NET Core XUnit 项目作为独立应用程序运行?
- wordpress - 为什么 Bootstrip 网格不工作,但按钮工作?
- ms-access - 尝试将访问表中的每条记录导出为单独的 CSV 文件
- javascript - 从 api 属性接收的 JSON 对象返回未定义
- angularjs - Angular 应用程序,但量角器在某些情况下会找到 Angular,但在其他情况下不会