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

标签 python pandas

例如:

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

我想添加一列 D,它表示 ABC 中相同数量的值>.

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 启发的另一个选项,使用 applypd.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

关于python - 如何计算多列中相同值的个数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48363338/

相关文章:

python - 如何旋转数据框

python - 为什么 matplotlib 不能在不同的线程中绘图?

python - 按列名拆分数据框中的多索引数据框

python - 使用 .agg(许多列)保留 groupby 之后的所有列更有效

python - 在 pandas dataframe python 列中搜索单词

Python - 使用 Pandas 进行行计算

python - 对称色图 matplotlib

python - 查找 numpy 数组中两个数字的指定匹配的所有出现次数

python - 根据一列中的公共(public)值从两个或多个 2d numpy 数组创建交集

python - 我怎样才能使我的 Python 字符串非贪婪地匹配?