<p>使用<a href="http://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.Series.dt.round.html" rel="nofollow noreferrer">^{<cd1>}</a>表示舍入值,用<code>ref_time</code>减去,用<a href="http://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.Series.abs.html" rel="nofollow noreferrer">^{<cd3>}</a>创建绝对值,用<a href="http://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.core.groupby.DataFrameGroupBy.idxmin.html" rel="nofollow noreferrer">^{<cd4>}</a>表示最小值的索引,因此可以通过<a href="http://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.loc.html" rel="nofollow noreferrer">^{<cd5>}</a>选择:</p>
<pre><code>idx = (df["refTime"].dt.round("H").sub(df["refTime"]).abs()
.groupby(df['name'], sort=False).idxmin())
df = df.loc[idx]
print (df)
target refTime name latitude longitude
0 5.0 2020-05-31 22:48:00 YMLT -41.529999 147.190002
1 6.0 2020-05-31 22:51:00 YWGT -36.419998 146.300003
2 6.0 2020-05-31 22:56:00 YMAY -36.060001 146.929993
7 5.0 2020-05-31 22:59:00 SUMU -34.830002 -56.000000
4 3.0 2020-05-31 22:46:00 FACT -33.990002 18.600000
5 5.0 2020-05-31 23:00:00 SGES -25.450001 -54.849998
6 5.0 2020-05-31 23:00:00 SGAS -25.250000 -57.520000
8 8.0 2020-05-31 23:00:00 NFFN -17.750000 177.449997
9 7.0 2020-05-31 23:00:00 SBPS -16.430000 -39.080002
10 7.0 2020-05-31 22:50:00 NSTU -14.330000 -170.720001
</code></pre>
<p><strong>详细信息</strong>:</p>
<pre><code>print (df["refTime"].dt.round("H").sub(df["refTime"]))
0 00:12:00
1 00:09:00
2 00:04:00
3 00:13:00
4 00:14:00
5 00:00:00
6 00:00:00
7 00:01:00
8 00:00:00
9 00:00:00
10 00:10:00
Name: refTime, dtype: timedelta64[ns]
</code></pre>
<hr/>
<pre><code>print (idx)
name
YMLT 0
YWGT 1
YMAY 2
SUMU 7
FACT 4
SGES 5
SGAS 6
NFFN 8
SBPS 9
NSTU 10
Name: refTime, dtype: int64
</code></pre>