<p>我的解决方案与ob Vaishali相似,但我想指出<code>asfreq</code>的一个陷阱。在</p>
<p>让我们从头开始。我们计算加权平均数:</p>
<pre><code>TEMP.groupby(['date', 'place']).apply(lambda x: np.round(np.average(x['temp'],weights=x['quantity']), 2)).reset_index(name = 'temp')
</code></pre>
<p>现在我们计算完整的日期范围:</p>
^{pr2}$
<p>我们使用此数据范围重新编制温度索引:</p>
<pre><code>TEMP = TEMP.groupby('place')['date', 'temp'].apply(lambda x: x.set_index('date').reindex(rng).ffill()).reset_index().rename(columns={'level_1': 'date'})
</code></pre>
<p>与<code>as_freq</code>相反,我们现在还将处理温度时间序列比位置序列“短”的情况。在</p>
<p>最后,我们可以把所有的东西放在一起:</p>
<pre><code>DF.merge(TEMP, on=['date', 'place'])
</code></pre>
<p>如果我们通过更改最后日期来稍微修改输入:</p>
<pre><code>DF = pd.DataFrame({'date': ['2019-01-01', '2019-01-11', '2019-01-13', '2019-01-14', '2019-01-22', '2019-02-15'], 'place':['A', 'A','A','A','B','C']})
</code></pre>
<p>Ruthger的解决方案提供了:</p>
<pre><code> date place temp
1 2019-01-11 A 5.0
3 2019-01-13 A 5.0
4 2019-01-14 A 7.0
0 2019-01-22 B 10.0
</code></pre>
<p>瓦西里:</p>
<pre><code> date place temp
0 2019-01-01 A NaN
1 2019-01-11 A 5.0
2 2019-01-13 A 5.0
3 2019-01-14 A 7.0
4 2019-01-22 B 10.0
5 2019-02-15 C NaN
</code></pre>
<p>乔格:</p>
<pre><code>0 2019-01-01 A NaN
1 2019-01-11 A 5.00
2 2019-01-13 A 5.00
3 2019-01-14 A 7.00
4 2019-01-22 B 10.00
5 2019-02-15 C 10.75
</code></pre>
<p>简要介绍:</p>
<pre><code>%timeit Ruthger(TEMP, DF)
526 ms ± 36.2 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)
%timeit Vaishali(TEMP, DF)
12.1 ms ± 135 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)
%timeit Joerg(TEMP, DF)
14.9 ms ± 872 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)
</code></pre>