<p>使用<code>apply</code>方法。在</p>
<pre><code>In [56]: df = pd.DataFrame({"count": [1] * 4 + [2] * 5 + [3] * 2 , "signal": [1] + [None] * 4 + [-1] + [None] * 5})
In [57]: df
Out[57]:
count signal
0 1 1
1 1 NaN
2 1 NaN
3 1 NaN
4 2 NaN
5 2 -1
6 2 NaN
7 2 NaN
8 2 NaN
9 3 NaN
10 3 NaN
[11 rows x 2 columns]
In [58]: def ffill_signal(df):
....: df["signal"] = df["signal"].ffill()
....: return df
....:
In [59]: df.groupby("count").apply(ffill_signal)
Out[59]:
count signal
0 1 1
1 1 1
2 1 1
3 1 1
4 2 NaN
5 2 -1
6 2 -1
7 2 -1
8 2 -1
9 3 NaN
10 3 NaN
[11 rows x 2 columns]
</code></pre>
<p>但是,请注意,<code>groupby</code>会重新排序。如果count列不是始终保持不变或增加,而是可能有重复的值,<code>groupby</code>可能会有问题。也就是说,给定一个<code>count</code>系列,比如<code>[1, 1, 2, 2, 1]</code>,<code>groupby</code>会这样分组:<code>[1, 1, 1], [2, 2]</code>,这可能会对你的前向填充产生不良影响。如果这是不需要的,那么您必须创建一个新的序列来与<code>groupby</code>一起使用,该序列始终保持不变或根据计数序列的变化而增加,可能使用<code>pd.Series.diff</code>和<code>pd.Series.cumsum</code></p>