Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/362.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_Dataframe_Summarize - Fatal编程技术网

python:标称变量(计数)

python:标称变量(计数),python,pandas,dataframe,summarize,Python,Pandas,Dataframe,Summarize,我有以下数据框: 关键产品参数是/否 1 AAA Paramy 1 1 AAA参数2 N 1 AAA参数3 N 2 AAA参数1 N 2 AAA Paramy 2 2 AAA Paramy 3 3 CCC参数1 3.2 3.3.3 我感兴趣的是按PROD和PARAMETER列汇总Y/N列值,并获得以下输出: PROD参数Y N AAA参数1 AAA参数2 1 AAA参数3 1 CCC参数11 0 CCC2 1 0 CCC参数3 1 0 而Y和N值是原始数据框中Y/N列值的计数。您可以通过创建

我有以下数据框:

关键产品参数是/否
1 AAA Paramy 1
1 AAA参数2 N
1 AAA参数3 N
2 AAA参数1 N
2 AAA Paramy 2
2 AAA Paramy 3
3 CCC参数1
3.2
3.3.3
我感兴趣的是按PROD和PARAMETER列汇总Y/N列值,并获得以下输出:

PROD参数Y N
AAA参数1
AAA参数2 1
AAA参数3 1
CCC参数11 0
CCC2 1 0
CCC参数3 1 0
而Y和N值是原始数据框中Y/N列值的计数。

您可以通过创建一个附加列来使用,该列的值为1,因为这两种方式都不重要(您只对它们进行计数)


在这种情况下,最简单的操作是生成Y/N列中存在的值的频率计数:

pd.crosstab([df['PROD'], df['PARAMETER']], df['Y/N'])

您希望获得
Y/N
列中的值的计数,按
PROD
参数
分组

import io
import pandas as pd

data = io.StringIO('''\
KEY PROD PARAMETER Y/N
1    AAA    PARAM1   Y
1    AAA    PARAM2   N
1    AAA    PARAM3   N
2    AAA    PARAM1   N
2    AAA    PARAM2   Y
2    AAA    PARAM3   Y
3    CCC    PARAM1   Y
3    CCC    PARAM2   Y
3    CCC    PARAM3   Y
''')
df = pd.read_csv(data, delim_whitespace=True)

res = (df.groupby(['PROD', 'PARAMETER'])['Y/N'] # Group by `PROD` and `PARAMETER`
                                                # and select the `Y/N` column
         .value_counts()                        # Get the count of values
         .unstack('Y/N')                        # Long-to-wide format change
         .fillna(0)                             # Fill `NaN`s with zero
         .astype(int))                          # Cast to integer
print(res)
输出:

<代码>是/否 生产参数 AAA参数1 参数2 1 参数3 1 CCC参数1 0 1 参数2 0 1 参数3 0 1
嗨,菲利克斯,到目前为止你试过什么?试过pd.melt和pd.pivot\u表。没有成功嘿,菲利克斯,你能在代码行中给我们一个df的样本,这样我们就可以玩它了吗?@StevenG,是你的朋友;)啊,我忘了交叉表!很好的解决方案!甚至是我。我刚想起来。以前一直在思考
groupby
/
pivot
import io
import pandas as pd

data = io.StringIO('''\
KEY PROD PARAMETER Y/N
1    AAA    PARAM1   Y
1    AAA    PARAM2   N
1    AAA    PARAM3   N
2    AAA    PARAM1   N
2    AAA    PARAM2   Y
2    AAA    PARAM3   Y
3    CCC    PARAM1   Y
3    CCC    PARAM2   Y
3    CCC    PARAM3   Y
''')
df = pd.read_csv(data, delim_whitespace=True)

res = (df.groupby(['PROD', 'PARAMETER'])['Y/N'] # Group by `PROD` and `PARAMETER`
                                                # and select the `Y/N` column
         .value_counts()                        # Get the count of values
         .unstack('Y/N')                        # Long-to-wide format change
         .fillna(0)                             # Fill `NaN`s with zero
         .astype(int))                          # Cast to integer
print(res)