【问题标题】:Converting SQL query into pandas syntax将 SQL 查询转换为 pandas 语法
【发布时间】:2021-11-12 15:44:34
【问题描述】:

我对 Pandas 很陌生。如何将以下查询转换为 pandas 语法。我不再查询 MS Access 表,而是查询名为 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 

任何贡献都会有所帮助,谢谢

【问题讨论】:

标签: sql pandas ms-access


【解决方案1】:

您可以使用一些 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})

【讨论】:

  • 写 df["Completion"] 的目的是什么,你用 Numpy average 的时候不用它,那么 python 怎么知道我们要在哪里统计 Status == "Completed" 呢? PS:我很高兴看到 Naija 这个名字,我来自津巴布韦。很高兴见到另一个非洲人。
  • 是否应该将第二组代码改为 ... .agg({"completion":np.average}) 而不是 ... .agg({"completion_metric":np.average}) ?如果是这样,那么这将解决先前的评论。不过我还有另一个问题....所以这个completion_metric 是pandas 列的形式,对吗?是否有可能让completion_metric 列具有相应的Short_ID,因为我需要知道哪个完成指标与哪个Short_ID 相关。
  • 那是我的错。我已经更新了答案。 df['completion_metric'] 应该是按Short_ID 分组后的平均字段。 completion_metricpandas.DataFramecompletion_metric 数据框中有 Short_ID 和它们的平均 completion_metric 值。
猜你喜欢
  • 2022-01-19
  • 2016-10-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-11
  • 2019-10-23
  • 2014-06-01
  • 1970-01-01
相关资源
最近更新 更多