【问题标题】:Python/Pandas equivalent of SAS Proc Summary procedureSAS Proc Summary 过程的 Python/Pandas 等价物
【发布时间】:2019-05-17 22:13:12
【问题描述】:

我是一位经验丰富的 SAS 程序员,正在转换为 Python/Pandas。我在 SAS 工作中经常使用 PROC Summary 来创建汇总数据文件,随后我可以在 SAS 程序的后续步骤中使用这些文件与其他文件合并。 SAS 中的 PROC Summary 过程非常强大、易于使用并且可以直接编写代码。我还没有在 Pandas 中找到一种功能强大、易于使用且直接编写代码的类似方法。由于我是 Python/Pandas 的新手,我想知道是否有一种方法可以做到这一点。

这将为 age_category 和性别的每个独特组合创建一个包含 9 列的简单输出文件。

proc summary data='input file' nway;
 class age_category gender;
 var weight_kg height_cm;
 output out='output file'
   mean(weight_kg) = weight_avge
   max(weight_kg) = weight_max
   min(weight_kg) = weight_min
   mean(height_cm) = height_avge
   max(height_cm) = height_max
   min(height_cm) = height_min
   n(height_cm) = n_of_cases
  ; 
run; 

我正在尝试在 Pandas 中做同样的事情,将汇总数据输出到数据框。

【问题讨论】:

  • edit您的问题,而不是添加 cmets。代码在 cmets 中不可读。
  • 只需在代码行前添加 4 个空格即可。您可以突出显示并使用 ctrl-K 让编辑器为您执行此操作。
  • 我将您的示例代码从评论复制到问题中。删除了变量列表中不正确的逗号。
  • 感谢您帮助使 SAS 代码更清晰。

标签: pandas sas


【解决方案1】:

在Python中,先按age_category性别分组,按统计函数聚合,如:

dt=df.groupby(['age','gender']).agg(['mean','max','min','count'])

【讨论】:

  • 考虑指定类似于 SAS 的数字列:df.groupby([...])["weight_kg", "height_cm"].agg(...)。否则,所有数字列都会被聚合。
  • 这有点帮助,但它仍然没有提供所需格式的输出数据帧。目标是创建一个输出文件,该文件对于 Age、Gender、Weight_avge、Weight_max、Weight_min、Height_avge、Height_max、Height_min 和 N_of_Cases 中的每一个都有单独的列。 . .列名是刚刚列出的那些;并且行索引为 0, 1, 2 。 . .当我尝试建议时,行索引是 GroupBy 变量的串联,列名的格式为 ('weight_kg','mean') 。 . .这使得输出数据框难以使用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-26
  • 2015-02-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多