从Moodle调查中,我得到下一个DataFrame
# -*- coding: utf-8 -*-
import pandas as pd
data = 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 |
大熊猫有什么办法吗?
答案 0 :(得分:1)
您可以使用DataFrame.filter
使所有以正则表达式Exp
开头的列(^
是字符串的开头),然后用value_counts
调用DataFrame.apply
并最后将NaN
s转换为0
,并转换为整数:
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