Skip to main content
 首页 » 编程设计

python之如何计算多列中相同值的个数

2025年05月04日11hnrainll

例如:

A B C 
1 1 2 
2 1 2 
3 3 3 
3 2 1 

我想添加一列 D,它表示 A、B 和 C 中相同数量的值>.

D 
2 
2 
3 
1 

请您参考如下方法:

选项 1
您可以使用 stack + groupby + value_counts:

df['D'] = df.stack().groupby(level=0).value_counts().max(level=0) 

df 
 
   A  B  C  D 
0  1  1  2  2 
1  2  1  2  2 
2  3  3  3  3 
3  3  2  1  1 

如果你想要具有最高模式的数字,链接一个 groupby + head 调用 -

v = (df.stack() 
       .groupby(level=0) 
       .value_counts() 
       .groupby(level=0) 
       .head(1) 
       .reset_index(level=0, drop=True) 
) 
 
1    2 
2    2 
3    3 
1    1 
dtype: int64 

df['Num'], df['Num_Mode'] = v.index, v.values   # to assign it 

如果多个数具有相同的最高模式,则只返回其中一个。


选项 2
受@Wen 启发的另一个选项,使用 apply 和 pd.Series.mode -

df['D'] = df.stack().groupby(level=0).apply(lambda x: pd.Series.mode(x).max()) 

或者,

df['D'] = df.apply(pd.Series.mode, 1).max(1).astype(int) 

df 
 
   A  B  C  D 
0  1  1  2  2 
1  2  1  2  2 
2  3  3  3  3 
3  3  2  1  1