我有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
现在,我想在此数据帧中再添加两列,以使新列-num
和count
分别引用该行中出现次数最多的数字及其计数,即:< / 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
我该怎么办?
答案 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)