<p>使用:</p>
<ul>
<li><a href="http://panda.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.filter.html" rel="nofollow noreferrer">^{<cd1>}</a>列,带<code>times</code></li>
<li>按最后一个<a href="http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.notnull.html" rel="nofollow noreferrer">^{<cd3>}</a>和<a href="http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.idxmax.html" rel="nofollow noreferrer">^{<cd4>}</a>获取列名</li>
<li>按<a href="http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.lookup.html" rel="nofollow noreferrer">^{<cd5>}</a>到<code>Series</code>获取值</li>
<li>最后一个<a href="http://pandas.pydata.org/pandas-docs/stable/generated/pandas.Series.sub.html" rel="nofollow noreferrer">^{<cd7>}</a>与<a href="http://pandas.pydata.org/pandas-docs/stable/generated/pandas.Series.dt.total_seconds.html" rel="nofollow noreferrer">^{<cd8>}</a></li>
</ul>
<hr/>
<pre><code>a = df.filter(like='time').notnull().iloc[:, ::-1].idxmax(1)
print (a)
0 time2
1 time4
2 time5
dtype: object
df['diff']= pd.Series(df.lookup(df.index,a),index=df.index)
.sub(df['time1'])
.dt.total_seconds()
print (df['diff'])
0 0.0
1 1786.0
2 4.0
Name: diff, dtype: float64
</code></pre>
<p><code>numpy alternative</code>:</p>
^{pr2}$
<p>更一般的<a href="https://stackoverflow.com/a/47009430/2901002">^{<cd10>}</a>解决方案-按<a href="http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.iloc.html" rel="nofollow noreferrer">^{<cd11>}</a>选择第一列和最后一列:</p>
<pre><code>df1 = df.filter(like='time')
df['diff']= df1.ffill(1).iloc[:, -1].sub(df1.iloc[:, 0]).dt.total_seconds()
print (df['diff'])
0 0.0
1 1786.0
2 4.0
Name: diff, dtype: float64
</code></pre>