Python 按值重新格式化数据帧计数
从Moodle调查中,我得到了下一个数据帧Python 按值重新格式化数据帧计数,python,pandas,Python,Pandas,从Moodle调查中,我得到了下一个数据帧 # -*- 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"],
# -*- 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《惯例》2 | 0 | 4|
|1一个惯例| 0 | 1 | 0|
在pandas中有什么方法可以做到这一点吗?您可以通过regex查看以
Exp
开头的所有列(^
表示字符串的开头),然后调用,最后将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
编辑:
伟大的更进一步:在“应用程序”栏中,我可以有多个响应。拆分值后,有没有一种简单的方法可以重用您的解决方案?@NBur-有点复杂,请给我一些时间。@NBur-它更复杂,需要拆分和
堆栈,编辑答案。我自己不会发现这个…
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