假设我有一个如下所示的数据框。我想要的是,如果列 a、b、c 之间的数字出现最多,那么它应该输出该数字,或者如果所有三个数字都不同,则取 a 的数字。比如第一行,1和5中出现最多的1,那么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
预期输出
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
最佳答案
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)
关于python - Pandas:检查一个数字是否连续多次出现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48392604/