首页 > 解决方案 > 如何循环 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)

很高兴,如果你们能帮忙。

标签: pythonpython-3.xpandasclass

解决方案


在没有看到您的数据的情况下,我不知道您应该合并数据框的确切方式,但这是我的想法。假设您以某种方式获得了数据框,因此存在三个相关列:'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)

推荐阅读