python - 合并不同的列值 - 熊猫
问题描述
我有九列'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)
解决方案
您可以使用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)
我发现的另一个解决方案是这个
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()
我希望它有所帮助,
尼古拉斯
推荐阅读
- javascript - 流图可以缩放吗?
- visual-studio - 在 Xamarin.forms 中找不到页面
- c# - 将泛型方法转换为异步导致泛型参数出现问题
- asp.net-mvc - 按钮组和 MVC 问题
- module - 从 Odoo8 到 Odoo11:rmanage report_sxw
- c# - 用 C++ 编写 .Net 窗口应用程序
- angular - 以角度声明对象的可观察数组
- java - md5_file() PHP 不同于 Java MD5 for txt 文件
- reactjs - 如何在表单操作 url 中传递变量?
- python - 带有 Django 的 Postgres - 配置不正确。错误:配置不当:加载 psycopg2 模块时出错:没有名为“psycopg2”的模块