我有一个数据框,每一行代表一个由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
我发现用PeriodIndex
的元素制作Peroid
是不可能的(每条记录中的用墙时间不一致)。
我以为可以创建一个PeriodIndex
的{{1}},然后将certian 30 minutes
中所有记录的核心数分配给相应的Period
。但是我不知道该怎么做。
我期望的是:
Period
答案 0 :(得分: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