查找 Dataframe 中的多数元素(PANDAS)

xxhby3vn  于 2022-11-20  发布在  其他
关注(0)|答案(3)|浏览(185)

我需要基于各个列中的(int 64)元素构建一个多数表决(3/5)作为新列(Voting)

Column1  Column2 Column3 Column4 Column5
0   0   0   6   1   0
1   4   4   6   4   0
2   4   2   2   2   2
3   4   4   4   4   4
4   0   0   0   2   4
5   6   6   6   6   6
6   3   3   3   3   5
7   0   6   6   0   4
8   3   3   3   3   4
9   2   2   4   2   2

我期待的结果是:
第一次

kfgdxczn

kfgdxczn1#

试,pd.Series.mode

def f(x):
    result = x.mode()
    return result[0] if len(result) == 1 else -1

df['vote'] = df.T.apply(f)
print(df)

输出量:

Column1  Column2  Column3  Column4  Column5  vote
0        0        0        6        1        0     0
1        4        4        6        4        0     4
2        4        2        2        2        2     2
3        4        4        4        4        4     4
4        0        0        0        2        4     0
5        6        6        6        6        6     6
6        3        3        3        3        5     3
7        0        6        6        0        4    -1
8        3        3        3        3        4     3
9        2        2        4        2        2     2
y0u0uwnf

y0u0uwnf2#

您可以使用modenp。where()

import numpy as np
df['Voting']=np.where(df.mode(axis=1)[1].notnull(),-1,df.mode(axis=1)[0])
print(df)
'''
   Column1  Column2  Column3  Column4  Column5  Voting
0        0        0        6        1        0     0.0
1        4        4        6        4        0     4.0
2        4        2        2        2        2     2.0
3        4        4        4        4        4     4.0
4        0        0        0        2        4     0.0
5        6        6        6        6        6     6.0
6        3        3        3        3        5     3.0
7        0        6        6        0        4    -1.0
8        3        3        3        3        4     3.0
9        2        2        4        2        2     2.0
'''
rxztt3cl

rxztt3cl3#

使用DataFrame.mode

df.mode(axis=1).apply(lambda x: x.iloc[0] if x.isnull().any() else -1, axis=1)

相关问题