擅长:python、mysql、java
<ul>
<li>我掉了<code>target</code></li>
<li>我将您的专栏分成<code>pd.MultiIndex</code></li>
<li>确保时间戳实际上是时间戳(除非您这样做,否则无需在您的一端执行此操作)</li>
<li><code>groupby</code><code>'session_id'</code>然后使用<code>'first'</code>和{<cd6>}获得第一个和最后一个非空值。在</li>
<li><code>pipe</code>方便地将结果传递给一个为我减法的函数</li>
</ul>
<hr/>
<pre><code>d = df.drop('target', 1)
a = d.columns.str.extract('([a-z]+)(\d+)', expand=True).values.T
mux = pd.MultiIndex.from_arrays([a[0], a[1].astype(int)])
d.columns = mux
for (c0, c1), col in d.iteritems():
if c0 == 'time':
d[(c0, c1)] = pd.to_datetime(col, errors='coerce')
f = lambda d: d['last'].sub(d['first']).dt.total_seconds()
d.time.stack().groupby('session_id').agg(['last', 'first']).pipe(f)
session_id
21669 0.0
54843 1786.0
77292 4.0
dtype: float64
</code></pre>