将 SQL 查询转换为 pandas 语法
Converting SQL query into pandas syntax
我对 Pandas 很陌生。如何将以下查询转换为 pandas 语法。我不再查询 MS Access table,我现在查询一个名为 df.
的 pandas DataFrame
查询是:
SELECT
Short_ID,
SUM(IIF(Status = 'Completed', 1, 0))) / COUNT (Status) AS completion_metric
FROM
PROMIS_LT_Long_ID
GROUP BY
Short_ID;
查询结果是这样的:
Short_ID | completion_metric
---------+------------------
1004 | 0.125
1005 | 0
1004 | 0.5
我已经使用以下代码创建了 pandas df,现在我想查询 pandas DataFrame 并获得与上述查询相同的结果。
import pyodbc
import pandas as pd
def connect_to_db():
db_name = "imuscigrp"
conn = pyodbc.connect(r'DRIVER={SQL Server};SERVER=tcp:SQLDCB301P.uhn.ca\SQLDCB301P;DATABASE=imucsigrp'
r';UID=imucsigrp_data_team;PWD=Kidney123!')
cursor = conn.cursor()
return cursor, conn
def completion_metric():
SQL_Query = pd.read-sql_query('SELECT PROMIS_LT_Long_ID.Short_ID, PROMIS_LT_Long_ID.Status FROM PROMIS_LT_Long_ID', conn)
#converts SQL_Query into Pandas dataframe
df = pd.DataFrame(SQL_Query, columns = ["Short_ID", "Status"])
#querying the df to obtain longitudinal completion metric values
return
任何贡献都会有所帮助,谢谢
您可以使用一些 numpy 函数来执行类似的操作。
例如,numpy.where
根据条件替换值。
import numpy as np
df = pd.DataFrame(SQL_Query, columns = ["Short_ID", "Status"])
df["completion_metric"] = np.where(df.Status == "Completed", 1, 0)
然后 numpy.average
计算分组数据的平均值。
completion_metric = df.groupby("Short_ID").agg({"completion_metric": np.average})
我对 Pandas 很陌生。如何将以下查询转换为 pandas 语法。我不再查询 MS Access table,我现在查询一个名为 df.
的 pandas DataFrame查询是:
SELECT
Short_ID,
SUM(IIF(Status = 'Completed', 1, 0))) / COUNT (Status) AS completion_metric
FROM
PROMIS_LT_Long_ID
GROUP BY
Short_ID;
查询结果是这样的:
Short_ID | completion_metric
---------+------------------
1004 | 0.125
1005 | 0
1004 | 0.5
我已经使用以下代码创建了 pandas df,现在我想查询 pandas DataFrame 并获得与上述查询相同的结果。
import pyodbc
import pandas as pd
def connect_to_db():
db_name = "imuscigrp"
conn = pyodbc.connect(r'DRIVER={SQL Server};SERVER=tcp:SQLDCB301P.uhn.ca\SQLDCB301P;DATABASE=imucsigrp'
r';UID=imucsigrp_data_team;PWD=Kidney123!')
cursor = conn.cursor()
return cursor, conn
def completion_metric():
SQL_Query = pd.read-sql_query('SELECT PROMIS_LT_Long_ID.Short_ID, PROMIS_LT_Long_ID.Status FROM PROMIS_LT_Long_ID', conn)
#converts SQL_Query into Pandas dataframe
df = pd.DataFrame(SQL_Query, columns = ["Short_ID", "Status"])
#querying the df to obtain longitudinal completion metric values
return
任何贡献都会有所帮助,谢谢
您可以使用一些 numpy 函数来执行类似的操作。
例如,numpy.where
根据条件替换值。
import numpy as np
df = pd.DataFrame(SQL_Query, columns = ["Short_ID", "Status"])
df["completion_metric"] = np.where(df.Status == "Completed", 1, 0)
然后 numpy.average
计算分组数据的平均值。
completion_metric = df.groupby("Short_ID").agg({"completion_metric": np.average})