【问题标题】:Merge different columns Values - Pandas合并不同的列值 - 熊猫
【发布时间】:2019-01-03 16:07:27
【问题描述】:

我有九列'instlevel1','instlevel2','instlevel3', 'instlevel4', 'instlevel5','instlevel6','instlevel7','instlevel8','instlevel9'

此列的值填充如下:如果 instlevel1 值为 1,则所有其他值为 0,如果 instlevel2 值为 1,则所有其他值为所有其他列 (包括 instlevel1) 为 0。

我想将其“透视”在一列上。我得到了想要的结果。但我想知道是否有最有效的方法来做到这一点。因为这个案例非常重复。这是我所做的代码。

nivelEducacion = test[['instlevel1','instlevel2','instlevel3', 'instlevel4', 'instlevel5','instlevel6','instlevel7','instlevel8','instlevel9']].idxmax(axis=1)

test['nivelEducacion'] = nivelEducacion
test['nivelEducacion'] = test['nivelEducacion'].replace(['instlevel1'], '1')
test['nivelEducacion'] = test['nivelEducacion'].replace(['instlevel2'], '2')
test['nivelEducacion'] = test['nivelEducacion'].replace(['instlevel3'], '3')
test['nivelEducacion'] = test['nivelEducacion'].replace(['instlevel4'], '4')
test['nivelEducacion'] = test['nivelEducacion'].replace(['instlevel5'], '5')
test['nivelEducacion'] = test['nivelEducacion'].replace(['instlevel6'], '6')
test['nivelEducacion'] = test['nivelEducacion'].replace(['instlevel7'], '7')
test['nivelEducacion'] = test['nivelEducacion'].replace(['instlevel8'], '8')
test['nivelEducacion'] = test['nivelEducacion'].replace(['instlevel9'], '9')
test['nivelEducacion'] = test.nivelEducacion.astype('category')
test = test.drop(['instlevel1', 'instlevel2','instlevel3','instlevel4','instlevel5','instlevel6','instlevel7','instlevel8','instlevel9'], axis=1)

【问题讨论】:

    标签: python pandas sklearn-pandas


    【解决方案1】:

    您可以使用 pandas 中的melt 函数。这可能不是最好的解决方案,但它可以完成工作:

    s = pd.Series(list('aaabbbccddefgh')).astype('category') # generate fake dataset
    df = pd.get_dummies(s) # fake df like you have (One Hot Encoded)
    
    df2 = pd.melt(df, value_vars=["a", "b", "c", "d", "e", "f", "g", "h"])
    df2 = df2[df2.value == 1]  # to keep only existing categories
    df2.drop("value", axis=1, inplace=True)
    

    我找到的另一个解决方案是this one

    x = df.stack()  # in that case you have to restrict only to your columns
    df2 = pd.Series(pd.Categorical(x[x!=0].index.get_level_values(1))).to_frame()
    

    希望对你有帮助

    尼古拉斯

    【讨论】:

      猜你喜欢
      • 2017-04-17
      • 2022-01-06
      • 2021-05-28
      • 1970-01-01
      • 2021-01-08
      • 2019-12-15
      • 1970-01-01
      • 2016-11-26
      • 1970-01-01
      相关资源
      最近更新 更多