本文介绍了如何对 pandas 列进行多数表决的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我有一个数据框,其中有10个不同的列,A1
,A2
,...,A10
.这些列包含y
或n
.如果大多数列(A1
,A2
,...,A10
)分别为y
和n
,则我想创建另一个值为y
的列.我该怎么办?
I have a dataframe which has 10 different columns, A1
, A2
, ...,A10
. These columns contain y
or n
. I'd like to create another column whose value is y
if the majority of columns (A1
, A2
, ...,A10
) are y
and n
otherwise. How can I do this?
推荐答案
使用 DataFrame.mode
:
df['majority'] = df.mode(axis=1)[0]
示例
np.random.seed(0)
df = pd.DataFrame(np.random.choice(['y', 'n'], size=(10, 10)))
print(df)
0 1 2 3 4 5 6 7 8 9
0 y n n y n n n n n n
1 n y y n y y y y y n
2 y n n y y n n n n y
3 n y n y n n y n n y
4 y n y n n n n n y n
5 y n n n n y n y y n
6 n y n y n y y y y y
7 n n y y y n n y n y
8 y n y n n n n n n y
9 n n y y n y y n n y
df['majority'] = df.mode(axis=1)[0]
print(df)
0 1 2 3 4 5 6 7 8 9 majority
0 y n n y n n n n n n n
1 n y y n y y y y y n y
2 y n n y y n n n n y n
3 n y n y n n y n n y n
4 y n y n n n n n y n n
5 y n n n n y n y y n n
6 n y n y n y y y y y y
7 n n y y y n n y n y n
8 y n y n n n n n n y n
9 n n y y n y y n n y n
如果有必要处理真正的多数决定与分裂决定之间的区别,则可以使用 numpy.where
.例如:
If it is necessary to handle the distinction between true majority and split decisions, you could use numpy.where
. eg:
mode = df.mode(axis=1)
df['majority'] = np.where(mode.isna().any(1), mode[0], 'split')
print(df)
0 1 2 3 4 5 6 7 8 9 majority
0 y n n y n n n n n n n
1 n y y n y y y y y n y
2 y n n y y n n n n y n
3 n y n y n n y n n y n
4 y n y n n n n n y n n
5 y n n n n y n y y n n
6 n y n y n y y y y y y
7 n n y y y n n y n y split
8 y n y n n n n n n y n
9 n n y y n y y n n y split
这篇关于如何对 pandas 列进行多数表决的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!