如何创建具有不同期间索引的数据框

时间:2019-07-20 06:46:33

标签: pandas numpy dataframe time-series timespan

我有一个数据框,每一行代表一个由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

1 个答案:

答案 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