python - 如何循环 3 个分类为“正”、“负”和“中性”的熊猫数据帧并列出它们?
问题描述
我有 1D 概率数据(作为 DataFrame),根据它们的值,我想将它们分类为“正”、“负”和“中性”。
示例结果:
Classes = ['positive', 'neutral','negative',....]
这是我的脚本:
for i in mle_positive, mle_negative, mle_neutral:
cond = [((mle_positive.iloc[i] > mle_negative.iloc[i]).all(axis=0) and (mle_positive.iloc[i] > mle_neutral.iloc[i]).all(axis=0)),
((mle_negative.iloc[i] > mle_positive.iloc[i]).all(axis=0) and (mle_negative.iloc[i] > mle_neutral.iloc[i]).all(axis=0)),
((mle_neutral.iloc[i] > mle_negative.iloc[i]).all(axis=0) and (mle_neutral.iloc[i] > mle_positive.iloc[i]).all(axis=0)),
((mle_neutral.iloc[i] == mle_negative.iloc[i]).all(axis=0) and (mle_neutral.iloc[i] == mle_positive.iloc[i]).all(axis=0)),
((mle_negative.iloc[i] == mle_positive.iloc[i]).all(axis=0) and (mle_negative.iloc[i] == mle_neutral.iloc[i]).all(axis=0)),
((mle_neutral.iloc[i] == mle_negative.iloc[i]).all(axis=0) and (mle_neutral.iloc[i] == mle_positive.iloc[i]).all(axis=0))]
idx = ['positive', 'negative', 'neutral', 'neutral', 'neutral', 'neutral']
classes = np.select(cond, idx, default = '')
错误是:
ValueError:缓冲区的维数错误(预期为 1,得到 2)
很高兴,如果你们能帮忙。
解决方案
在没有看到您的数据的情况下,我不知道您应该合并数据框的确切方式,但这是我的想法。假设您以某种方式获得了数据框,因此存在三个相关列:'mle_positive'、'mle_neutral'、'mle_negative'
然后,您似乎正在寻找这三列中的最大值。你用idxmax
.
check_cols = ['mle_positive', 'mle_neutral', 'mle_negative']
df['Class_cat'] = df[check_cols].idxmax(axis=1)
然后'Class_cat'(我不喜欢使用'Class'作为标题,因为它是一个特殊的词)应该看起来像:
0 mle_positive
1 mle_neutral
2 mle_positive
3 mle_negative
然后,如果您真的想摆脱“mle_”,您可以使用replace
df.replace({'mle_':''}, inplace=True)
推荐阅读
- python-3.x - 如何使用 Matplotlib 中的轴将图添加到引用右 y 轴的子图
- python - 如何在主线程中获取时间循环作业错误日志
- laravel - 如何实现对 Laravel Lighthouse 的 Group By 查询?
- python - 如何使用 Pyserial 在 python 中创建一个类以及如何初始化它
- reactjs - 如何在库更新后调试“编译失败”错误?
- mysql - 查找存储过程中排名最高的匹配项
- python - 使用 django 从 html 表单输入 Python 控制台
- node.js - npm install --production 忽略我的依赖
- ios - 如何跟踪连接到 iPad/iPhone 的鼠标的位置?
- java - 如何将子级添加到 Firebase 中的现有数据