[我对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中使用某种循环?
感谢您的帮助。
这两行应该足以获取Count
和Percentage
列(它也占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
希望有帮助:)