每行熊猫数据框的“ value_counts”

时间:2020-02-01 06:59:40

标签: pandas dataframe

我有pandas个数据框,格式为:

       Col1   Col2   Col3   Col4   Col5
 0      1      2       2     1       2
 1      2      2       1     1       1
 2      2      2       2     2       2
 3      1      1       1     1       2
 4      1      2       2     1       1

现在,我想在此数据帧中再添加两列,以使新列-numcount分别引用该行中出现次数最多的数字及其计数,即:< / p>

       Col1   Col2   Col3   Col4   Col5   count   num
 0      1      2       2     1       2     3       2
 1      2      2       1     1       1     3       1
 2      2      2       2     2       2     5       2
 3      1      1       1     1       2     4       1
 4      1      2       2     1       1     3       1

我该怎么办?

1 个答案:

答案 0 :(得分:0)

通过DataFrame.mode获取最多出现值,通过DataFrame.eq比较并通过True计算sum值,最后通过DataFrame.assign创建新列:

m = df.mode(axis=1)[0]
df = df.assign(count=df.eq(m, axis=0).sum(axis=1), num=m)
print (df)
   Col1  Col2  Col3  Col4  Col5  count  num
0     1     2     2     1     2      3    2
1     2     2     1     1     1      3    1
2     2     2     2     2     2      5    2
3     1     1     1     1     2      4    1
4     1     2     2     1     1      3    1

关于自定义功能的另一种想法,但是如果大数据框较大,则apply可能在后台进行循环,

def f(x):
    x = x.value_counts()
    return pd.Series([x.index[0], x.iat[0]])
df[['count','num']] = df.apply(f, axis=1)