<p>实际上,使用<a href="https://docs.python.org/2/library/itertools.html#itertools.groupby" rel="nofollow noreferrer">itertools.groupby</a>非常容易:</p>
<pre><code>from itertools import groupby
def min_max_durations(row):
# the group object consumes the iterator, but we don't care about the values
# so we just sum "1" to get the length.
# Taken from https://stackoverflow.com/questions/44490079/how-to-turn-an-itertools-grouper-object-into-a-list
durations = [sum(1 for _ in group) for key, group in groupby(row) if not isinstance(key, float)]
return min(durations), max(durations)
data["min_lengths_of_stay"], data["max_lengths_of_stay"] = zip(*data.apply(min_max_durations, axis=1))
</code></pre>
<p>对<code>float</code>的实例检查只是从计数中移除<code>NaN</code>值的一种快速方法,您可以将其任意复杂化。你知道吗</p>
<p>这将输出正确的结果(请注意,复制粘贴复制代码在Unit3中有3个“Alex”条目,与您的示例不同)</p>
<pre><code> Leader_Jan Leader_Feb Leader_Mar Leader_Apr min_lengths_of_stay \
Unit1 Nina Nina Nina Nina 4
Unit2 Lena Lena NaN Lena 1
Unit3 Maria Alex Alex Alex 1
Unit4 Emilia NaN NaN NaN 1
Unit5 NaN Corinna Petra NaN 1
max_lengths_of_stay
Unit1 4
Unit2 2
Unit3 3
Unit4 1
Unit5 1
</code></pre>