Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/340.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 按值重新格式化数据帧计数_Python_Pandas - Fatal编程技术网

Python 按值重新格式化数据帧计数

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"],

从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"], # 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