在Python中使用计数和百分比创建Proc频率表

问题描述 投票:0回答:1

[我对Python相对较新,但是取得了一些稳固的进步,但是我对利用Proc Freq在SAS中将频率表转换为python的方法转换SAS过程感到不满意。

我的数据集的缩小版本如下:

import pandas as pd

data = {'Code':  [719, 719,719,719,719,719],
        'National': [1001, 1001,1001,1001,1001,1001],
        'Regional': [3005,3005,3005,3005,3005,3005],
         'Local': [2002,2002,2002,2002,2002,2002],
        'Collection Variable': [1,1,2,3,3,3]}


df = pd.DataFrame (data, columns = ['Code','National', 'Regional', 'Local','Collection Variable'])

SAS的输出将采用此值,并为收集变量列添加一个频率和百分比列,结果如下:

National  Regional  Local  Code  Collection  Count  Percent
                                  Variable   

  1001      3005    2002   719       1         2      0.333333
  1001      3005    2002   719       2         1      0.166667
  1001      3005    2002   719       3         3      0.5

在python中有可能这样吗?我设法获得了百分比,但是在单独的列中运行,但无法获得其他列。

此外,对于许多不同的Collection变量,也会发生这种情况。在SAS中,它会为每个变量创建一个新表,是否可以在python中使用某种循环?

感谢您的帮助。

python loops sas frequency proc
1个回答
0
投票

这两行应该足以获取CountPercentage列(它也占nan值):

df = df = df.astype(str).groupby(df.columns.tolist()).size().reset_index().rename(columns={0:'Count'})
df['Percentage'] = df[df['Collection Variable'] != 'nan']['Count'].apply(lambda x: x/sum(df[df['Collection Variable'] != 'nan']['Count']))

输出:

National  Regional  Local  Code  Collection  Count  Percent
                                  Variable   

  1001      3005    2002   719       1         2      0.333333
  1001      3005    2002   719       2         1      0.166667
  1001      3005    2002   719       3         3      0.5

希望有帮助:)

© www.soinside.com 2019 - 2024. All rights reserved.