<p>您可以使用<code>dt.floor()</code>函数进行舍入:</p>
<pre><code>df['Interval Start'] = df['Interval Start'].dt.floor("15min")
</code></pre>
<p>结果(基于您编辑的数据):</p>
<pre><code> specialist Language Interval Start status_duration
0 Mel Gibson German 2021-09-23 14:15:00 301
1 Mel Gibson German 2021-09-23 14:15:00 4678
2 Mel Gibson German 2021-09-24 13:30:00 12
</code></pre>
<p>然后我添加了一列,其中包含您期望的间隔数:</p>
<pre><code>df['len'] = 1 + df['status_duration']//900
</code></pre>
<p>结果:</p>
<pre><code>0 Mel Gibson German 2021-09-23 14:15:00 301 1
1 Mel Gibson German 2021-09-23 14:15:00 4678 6
2 Mel Gibson German 2021-09-24 13:30:00 12 1
</code></pre>
<p>然后,您可以使用<code>numpy.repeat()</code>复制相应的行,并使用<code>timedelta()</code>列出理解以构建相应的间隔</p>
<pre><code>import numpy as np
from datetime import timedelta
new_df = pd.DataFrame({'specialist': np.repeat(df['specialist'], df['len']),
'Language': np.repeat(df['Language'], df['len']),
'Interval Start': [el for sublist in [[x['Interval Start'] + timedelta(minutes=15*y) for y in range(0, x['len'])] for i, x in df.iterrows()] for el in sublist],
'status_duration': [el for sublist in [([900]*(x['len']-1)+[x['status_duration']%900]) for i, x in df.iterrows()] for el in sublist]
})
</code></pre>
<p>结果:</p>
<pre><code> specialist Language Interval Start status_duration
0 Mel Gibson German 2021-09-23 14:15:00 301
1 Mel Gibson German 2021-09-23 14:15:00 900
1 Mel Gibson German 2021-09-23 14:30:00 900
1 Mel Gibson German 2021-09-23 14:45:00 900
1 Mel Gibson German 2021-09-23 15:00:00 900
1 Mel Gibson German 2021-09-23 15:15:00 900
1 Mel Gibson German 2021-09-23 15:30:00 178
2 Mel Gibson German 2021-09-24 13:30:00 12
</code></pre>
<p>最后,您可能需要重置索引:</p>
<pre><code>new_df = new_df.reset_index(drop=True)
</code></pre>
<p>结果:</p>
<pre><code> specialist Language Interval Start status_duration
0 Mel Gibson German 2021-09-23 14:15:00 301
1 Mel Gibson German 2021-09-23 14:15:00 900
2 Mel Gibson German 2021-09-23 14:30:00 900
3 Mel Gibson German 2021-09-23 14:45:00 900
4 Mel Gibson German 2021-09-23 15:00:00 900
5 Mel Gibson German 2021-09-23 15:15:00 900
6 Mel Gibson German 2021-09-23 15:30:00 178
7 Mel Gibson German 2021-09-24 13:30:00 12
</code></pre>