python - 在不对结果进行排序的情况下计算数据帧的模式

标签 python pandas dataframe mode

我有一个这样的数据框:

df = pd.DataFrame({'a1': [2,3,4,8,8], 'a2': [2,5,7,5,10], 'a3':[1,9,4,10,2]})

    a1  a2  a3
0   2   2   1
1   3   5   9
2   4   7   4
3   8   5   10
4   8   10  2

输出应该是:

0  2 
1  3
2  4
3  8 
4  8

要做什么:我想按行计算模式,如果模式不存在,我需要 a1(第一列)的值。

例如:在第二行 (3,5,9) 中,模式不存在,所以我在输出中得到 3

注意:我已经尝试过 df.mode(axis=1) 但这似乎按行打乱了值的序列,所以我并不总是得到值输出中的第一列。

最佳答案

无排序方法

agg + collections.Counter不对模式进行排序

from collections import Counter
df.agg(lambda x: Counter(x).most_common(1)[0][0], axis=1)

0    2
1    3
2    4
3    8
4    8
dtype: int64

模式排序方法

  1. 沿第一个轴使用mode,然后取先到的:

    df.mode(axis=1).iloc[:, 0]
    

    或者,

    df.mode(axis=1)[0] 
    

    0    2.0
    1    3.0
    2    4.0
    3    5.0
    4    2.0
    Name: 0, dtype: float64
    
  2. scipy.stats.mode

    from scipy.stats import mode
    np.array(mode(df, axis=1))[0].squeeze()
    array([2, 3, 4, 5, 2])
    

关于python - 在不对结果进行排序的情况下计算数据帧的模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49372237/

相关文章:

python - 为什么 python 子进程输出与 shell 不同?

python - 更改 Django 中特定 CharField 的呈现

python-3.x - 通过从列表中获取列名来乘以数据框的列

python - 检查 pandas DataFrame 中的两行是否具有相同的值集,无论列顺序如何

python - pandas.DataFrame.replace 似乎不起作用

python - 像sql一样在python中查询csv文件

python - 从 Python 调用和控制 GDB

python - 如何基于多个定界符 pandas 进行拆分

python - 如果列值的顺序发生变化,则拆分数据框 pandas

python-3.x - sklearn : Pandas Dataframe vs Numpy ndarray - Which is more efficient to hold a [600k * 1k] data of different data types