<p>在两列之间使用<a href="https://pandas.pydata.org/docs/user_guide/categorical.html" rel="nofollow noreferrer">ordered categoricals</a>和<a href="https://numpy.org/doc/stable/reference/generated/numpy.where.html" rel="nofollow noreferrer">^{<cd1>}</a>表示get<code>Equal</code>或minimal的解决方案:</p>
<pre><code>print (df)
Segmentation 2019 Segmentation 2020
0 B VIP
1 B A
2 A B
3 C C
4 B D
classes = ['VIP','A','B','C','D']
df['Segmentation 2020'] = pd.Categorical(df['Segmentation 2020'],
ordered=True,
categories=classes)
df['Segmentation 2019'] = pd.Categorical(df['Segmentation 2019'],
ordered=True,
categories=classes)
mask = df['Segmentation 2019'].eq(df['Segmentation 2020'])
s = df[['Segmentation 2019','Segmentation 2020']].stack().min(level=0)
df['new'] = np.where(mask, 'Equal', s)
print (df)
Segmentation 2019 Segmentation 2020 new
0 B VIP VIP
1 B A A
2 A B A
3 C C Equal
4 B D B
</code></pre>
<p>或使用<a href="https://numpy.org/doc/stable/reference/generated/numpy.select.html" rel="nofollow noreferrer">^{<cd3>}</a>的解决方案:</p>
<pre><code>classes = ['VIP','A','B','C','D']
df['Segmentation 2020'] = pd.Categorical(df['Segmentation 2020'],
ordered=True,
categories=classes)
df['Segmentation 2019'] = pd.Categorical(df['Segmentation 2019'],
ordered=True,
categories=classes)
mask1 = df['Segmentation 2019'].lt(df['Segmentation 2020'])
mask2 = df['Segmentation 2019'].gt(df['Segmentation 2020'])
df['classes'] = np.select([mask1, mask2],
[df['Segmentation 2019'], df['Segmentation 2020']],
default='Equal')
print (df)
Segmentation 2019 Segmentation 2020 classes
0 B VIP VIP
1 B A A
2 A B A
3 C C Equal
4 B D B
</code></pre>