熊猫:检查一个数字是否连续出现多次

use*_*773 8 python pandas

假设我有一个如下的数据框.我想要的是,如果列a,b,c之间的数字出现最多,那么它应输出该数字,或者如果所有三个数字不同,则取a的数字.例如,在第一行中,1出现在1和5中最多,然后d中的输出为1.但在第二行中,列a,b,c的所有三个数字11,2,7都不同,输出是列的值a(11),因此d中的输出为11

list   a  b   c  
 1     1  5   1 
11    11  2   7 
 0     0  0   0 
 9     5  9   5 
 8     8  2   7  
Run Code Online (Sandbox Code Playgroud)

预期产出

list   a  b   c  d 
 1     1  5   1  1
11    11  2   7  11
 0     0  0   0  0
 9     5  9   5  5
 8     8  2   7  8 
Run Code Online (Sandbox Code Playgroud)

jpp*_*jpp 1

scipy计算模式,但我很惊讶在 numpy 中没有找到这个模式。

import pandas as pd
import numpy as np
from scipy import stats

df = pd.DataFrame([[1, 1, 5, 1],
                   [11, 11, 2, 7],
                   [0, 0, 0, 0],
                   [9, 5, 9, 5],
                   [8, 8, 2, 7]],
                  columns=['list', 'a', 'b', 'c'])

df['d'], df['count'] = stats.mode(df[['a', 'b', 'c']].values, axis=1)
df.loc[df['count'] == 1, 'd'] = df['a']
df = df.drop('count', 1)
Run Code Online (Sandbox Code Playgroud)