Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/79.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
将SAS proc sql转换为Python(熊猫)_Python_Sql_Count_Sas_Pandas Groupby - Fatal编程技术网

将SAS proc sql转换为Python(熊猫)

将SAS proc sql转换为Python(熊猫),python,sql,count,sas,pandas-groupby,Python,Sql,Count,Sas,Pandas Groupby,我使用Pandas库将一些代码从SAS重写为Python 我有这样的代码,我不知道该怎么处理它 你能帮帮我吗?因为太复杂了,我做不好。我更改了列的名称(用于加密敏感数据) 这是SAS代码: proc sql; create table &work_lib..opk_do_inf_4 as select distinct *, min(kat_opk) as opk_do_inf, co

我使用Pandas库将一些代码从SAS重写为Python

我有这样的代码,我不知道该怎么处理它

你能帮帮我吗?因为太复杂了,我做不好。我更改了列的名称(用于加密敏感数据)

这是SAS代码:

proc sql;
   create table &work_lib..opk_do_inf_4 as 
   select distinct         
            *,
            min(kat_opk) as opk_do_inf,
            count(nr_ks) as ilsc_opk_do_kosztu_infr
from &work_lib..opk_do_inf_3
group by kod_ow, kod_sw, nr_ks, nr_ks_pr, nazwa_zabiegu_icd_9, nazwa_zabiegu
having kat_opk = opk_do_inf
;
quit;
这是我对熊猫的尝试:

df = self.opk_do_inf_3() -> create DF using other function
df['opk_do_inf'] = df.groupby(by=['kod_ow', 'kod_sw', 'nr_ks', 'nr_ks_pr', 'nazwa_zabiegu_icd_9', 'nazwa_zabiegu'])['kat_opk'].min()
df['ilsc_opk_do_kosztu_infr'] = df.groupby(by=['kod_ow', 'kod_sw', 'nr_ks', 'nr_ks_pr', 'nazwa_zabiegu_icd_9', 'nazwa_zabiegu'])['nr_ks'].count()
df_groupby = df.groupby(by=['kod_ow', 'kod_sw', 'nr_ks', 'nr_ks_pr', 'nazwa_zabiegu_icd_9', 'nazwa_zabiegu']).filter(lambda x: x['kat_opk']==x['opk_do_inf'])
df = df_groupby.reset_index()
df = df.drop_duplcates()
return df

您可以使用pandasql包中的sqldf函数在dataframe上运行sql查询。下面的例子

“从pandasql导入sqldf” query=“从df中选择前10个*” newdf=sqldf(查询,局部变量())
“”“

首先,在聚合
分组查询中调用
选择*
是无效的SQL。SAS可能允许,但可能会产生未知结果。通常,
SELECT
列应限于
groupby
子句中的列

也就是说,聚合SQL查询通常可以翻译成带有
的操作,其中
使用
.loc
查询处理
(聚合前过滤)或
具有
(聚合后过滤)条件

SQL

选择col1、col2、col3、,
MIN(col1)作为MIN_col1,
平均值(col2)作为平均值,
MAX(col3)作为MAX_col3,
计数(*)作为计数对象
从mydata
按col1、col2、col3分组
具有col1=min(col1)
熊猫

一般的

agg_data=(mydata.groupby([“col1”、“col2”、“col3”),as_index=False)
.agg(min_col1=(“col1”,“min”),
mean_col2=(“col2”,“mean”),
max_col3=(“col3”,“max”),
count_obs=(“col1”,“count”))
.query(“col1==min\u col1”)
)
具体的

opk_do_inf_4 = (mydata.groupby(["kat_opk", "kod_ow", "kod_sw", "nr_ks", "nr_ks_pr", 
                                "nazwa_zabiegu_icd_9", "nazwa_zabiegu"], 
                                as_index=False)
                      .agg(opk_do_inf = ("kat_opk", "min"),
                           ilsc_opk_do_kosztu_infr = ("nr_ks", "count"))
                      .query("kat_opk == opk_do_inf")
               )
是否希望计算的MIN()和COUNT()值以SAS的方式重新合并到所有详细观测值中?或者你只想每组观察一次?