擅长:python、mysql、java
<p>答。分组依据<code>id</code>:</p>
<pre><code>df.groupby("id")
</code></pre>
<p>b。按<code>Time</code>排序:</p>
<pre><code>x.sort_values("Time") # x is a subset of df with identical `id`
d = x.sort_values("Time")[["start", "end"]].values
</code></pre>
<p>c。检查相邻记录对是否有<code>start</code>和<code>end</code>的交换</p>
<pre><code>isloop = [all(i[0] == i[1][::-1]) for i in zip(d[:-1], d[1:])]
</code></pre>
<p>所以完整的代码是:</p>
<pre><code>def func(x):
d = x.sort_values("Time")[["start", "end"]].values
isloop = [all(i[0] == i[1][::-1]) for i in zip(d[:-1], d[1:])]
return x[:-1][isloop]
df.groupby("id").apply(func)
</code></pre>
<p>结果是:</p>
<pre><code> Time Trip count end id start
id
2 2 2016-05-18 17:55:00 No 15 Vienna 2.0 Prague
15 1 2016-05-19 11:50:00 Yes 01 London 15.0 Paris
</code></pre>