将SAS proc sql转换为Python(熊猫)
我使用Pandas库将一些代码从SAS重写为Python 我有这样的代码,我不知道该怎么处理它 你能帮帮我吗?因为太复杂了,我做不好。我更改了列的名称(用于加密敏感数据) 这是SAS代码:将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
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的方式重新合并到所有详细观测值中?或者你只想每组观察一次?