按时间间隔花费的大部分时间标记行

时间:2017-09-20 06:30:06

标签: pandas

我有一个包含开始和结束时间的操作的数据集。我想标记每一天(早上,中午,晚上,晚上)的每一行。由于某些操作可能从一个部分开始而在另一个部分结束,因此我想考虑大部分时间花在哪里。

假设早上6点至11点,中午是上午11点至凌晨2点,我在上午10:30至下午1点之间采取行动,应将其标记为noon

我采用的一种方法是为每天的每个部分创建一个列,并计算每个部分(每行)花费的秒数,然后使用idxmax查找一天中的部分。但是,我如何计算(start, stop)到一天中的部分时间重叠?

1 个答案:

答案 0 :(得分:2)

df = pd.DataFrame([[0, 4],
                   [2, 5.2],
                   [0.2, 6],
                   [3, 4.1]], columns=['start', 'end'])


periods = {'morning':   (0, 3),
           'afternoon': (3, 6)}

for name, (start, stop) in periods.items():
    df['i_start'] = start
    df['i_end'] = stop
    overlap = df[['end', 'i_end']].min(axis=1) - df[['start', 'i_start']].max(axis=1)
    df.loc[overlap >= 0, name] = overlap[overlap >= 0]

result = df[list(periods)].idxmax(axis=1)

......应该做的工作(只要你不做一天到下一天的行动)。

相关问题