为了账号安全,请及时绑定邮箱和手机立即绑定

按值重新格式化 Pandas DataFrame 计数

按值重新格式化 Pandas DataFrame 计数

跃然一笑 2021-12-09 14:59:20
从 Moodle 调查中,我得到了下一个 DataFrame# -*- coding: utf-8 -*-import pandas as pddata = pd.DataFrame({    "Id":[0, 1, 2, 3, 4, 5],    "App ABAP": ["Aucune expérience", "Aucune expérience", "en Bachelor", "Aucune expérience", "Aucune expérience", "en Bachelor"], # where did you learn    "Exp ABAP": ["Aucune expérience", "Aucune expérience", "1 semestre de pratique", "Aucune expérience", "Aucune expérience", "1 semestre de pratique"], # how long did you practice    "Autre": ["-", "Arduino", "-", "-", "-", "-"],    "App Autre": ["Aucune expérience", "en Bachelor", "Aucune expérience", "Aucune expérience", "Aucune expérience", "Aucune expérience"],    "Exp Autre": ["Aucune expérience", "1 an de pratique", "Aucune expérience", "Aucune expérience", "Aucune expérience", "Aucune expérience"],    "App Python": ["en Bachelor", "en Terminale,; en Bachelor,; dans un autre cadre", "Aucune expérience", "en Bachelor", "Aucune expérience", "en Bachelor"],    "Exp Python": ["1 semestre de pratique", "1 semestre de pratique", "Aucune expérience", "1 semestre de pratique", "Aucune expérience", "1 semestre de pratique"],    })对于每种语言,我想按 Xp 值计算,例如:| Exp                    | ABAP | Autre | Python ||------------------------|------|-------|--------|| Aucune expérience      | 4    | 5     | 2      || 1 semestre de pratique | 2    | 0     | 4      || 1 an de pratique       | 0    | 1     | 0      |有没有办法在熊猫中做到这一点?
查看完整描述

1 回答

?
富国沪深

TA贡献1790条经验 获得超9个赞

您可以查看所有Exp以正则表达式开头的列(^用于字符串的开头) by DataFrame.filter,然后调用value_countswithDataFrame.apply并最后将NaNs转换为0with 转换为整数:


df = data.filter(regex='^Exp').apply(pd.value_counts).fillna(0).astype(int)

print (df)

                        Exp ABAP  Exp Autre  Exp Python

1 an de pratique               0          1           0

1 semestre de pratique         2          0           4

Aucune expérience              4          5           2

编辑:


df = (data.filter(regex='^App')

         .stack()

         .str.split(',;\s+', expand=True)

         .stack()

         .groupby(level=1)

         .value_counts()

         .unstack(0, fill_value=0)

         )

print (df)

                     App ABAP  App Autre  App Python

Aucune expérience           4          5           2

dans un autre cadre         0          0           1

en Bachelor                 2          1           4

en Terminale                0          0           1


查看完整回答
反对 回复 2021-12-09
  • 1 回答
  • 0 关注
  • 226 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号