python - 如何对熊猫中的列进行多数投票
问题描述
我有一个数据框,它有 10 个不同的列,A1
, A2
, ..., A10
。这些列包含y
或n
。我想创建另一列,其值是y
如果大多数列(A1
, A2
, ..., A10
)是y
,n
否则。我怎样才能做到这一点?
解决方案
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
推荐阅读
- php - php中的日期格式更改
- android - 如何使用搜索栏增加音量
- python-2.7 - 在 Anaconda 中安装 opencv python 包
- ios - 当核心数据实体没有变化时是否需要核心数据迁移?
- c++ - 为什么在编译时需要知道对象的内存配置文件以进行堆栈放置?
- c# - 文本框双向绑定在文本框未聚焦之前不会传输。每次按键都需要更新
- javascript - 在滑块上分组项目?
- php - How to get a variable value file from laravel blade
- css - 如何创建 CSS 样式的文本“标签”(不是 html 标签标签)?
- openlayers - 如何将geojson点添加到openlayers 3/4地图并使其可点击以打开其中包含属性的弹出窗口?