<p>这会让你开始-</p>
<pre><code>temp = df.apply(lambda x: x.groupby((x != x.shift()).cumsum()).cumcount()+1, axis=1)
mins = temp.min(1)
maxs = temp.max(1)
mask = temp.apply(lambda x: x.is_monotonic_increasing and x.is_unique, axis=1)
mins.loc[mask] = maxs.loc[mask]
mins.name='Min_length_of_stay_leaders'
maxs.name='Max_length_of_stay_leaders'
df.join(mins).join(maxs)
</code></pre>
<p><strong>输出</strong></p>
<pre><code> Leader_Jan Leader_Feb Leader_Mar Leader_Apr Min_length_of_stay_leaders \
Unit1 Nina Nina Nina Nina 4
Unit2 Lena Lena NaN Lena 1
Unit3 Alex Maria Alex Alex 1
Unit4 Emilia NaN NaN NaN 1
Unit5 NaN Corinna Petra NaN 1
Max_length_of_stay_leaders
Unit1 4
Unit2 2
Unit3 2
Unit4 1
Unit5 1
</code></pre>
<p><strong>解释</strong></p>
<pre><code>temp = df.apply(lambda x: x.groupby((x != x.shift()).cumsum()).cumcount()+1, axis=1)
</code></pre>
<p>这将为您提供按名称分组的连续领导者计数-</p>
<pre><code> Leader_Jan Leader_Feb Leader_Mar Leader_Apr
Unit1 1 2 3 4
Unit2 1 2 1 1
Unit3 1 1 1 2
Unit4 1 1 1 1
Unit5 1 1 1 1
</code></pre>
<p>只需提取<code>max</code>和<code>min</code>-</p>
<pre><code>mins = temp.min(1)
maxs = temp.max(1)
</code></pre>
<p>问题就出现在<code>Nina</code>身上——她一直在工作,所以在这种情况下<code>min</code>也需要是4。你知道吗</p>
<p>因此,对于边的情况,<code>mask</code>对象检测严格单调递增的序列,如果是这样的话,则替换为<code>max</code>。你知道吗</p>
<p>我仍然不确定它是否适用于所有情况,所以请检查</p>