我有一个数据框,其中有10个不同的列,A1A2,...,A10。这些列包含yn。如果大多数列(yA1,...,A2)是A10y,则我想创建另一个值为n的列。我怎样才能做到这一点?

最佳答案

使用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。例如:

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

08-07 16:37