Python SQL 到 pandas DataFrame

标签 python pandas sqlite dataframe

我有一个 SQL 查询:

pd.read_sql_query("""SELECT UvTab.A, UvTab.Uv,
                            IFNULL(DvTab.Dv, 0) AS Dv 
                                FROM
                                    (
                                        SELECT A, COUNT(*) AS Uv FROM B
                                            WHERE Vtype = 2 GROUP BY A
                                    ) AS UvTab
                                LEFT JOIN 
                                    (
                                        SELECT A, COUNT(*) AS Dv FROM B
                                            WHERE Vtype = 3 GROUP BY A
                                    ) AS DvTab
                                ON UvTab.A = DvTab.A
                            """, conn)

我的目标是获得相同的结果,但仅使用 pandas 的方法。我得到的是:

UvTab = B.loc[B.Vtype == 2].groupby("A").size()
UvTab = pd.DataFrame({'A' : UvTab.index, 'Uv' : UvTab.values})
DvTab = B.loc[B.Vtype == 3].groupby("A").size()
DvTab = pd.DataFrame({'A' : DvTab.index, 'Dv' : DvTab.values})
df = pd.merge(UvTab, DvTab, how='left', on='A')
df['Dv'] = df['Dv'].fillna(0)

而且看起来还不错。但这是表示查询的最简单且最好的方式吗?

最佳答案

一个想法是聚合 sum 进行计数匹配,然后使用 DataFrame.join :

UvTab = (B.Vtype == 2).astype(int).groupby(B["A"]).sum().reset_index(name='Uv')
DvTab = (B.Vtype == 3).astype(int).groupby(B["A"]).sum().to_frame('Dv')
df = UvTab.join(DvTab, on='A').fillna({'DV':0})

或者使用merge替代:

UvTab = (B.Vtype == 2).astype(int).groupby(B["A"]).sum().reset_index(name='Uv')
DvTab = (B.Vtype == 3).astype(int).groupby(B["A"]).sum().reset_index(name='Dv')
df = UvTab.merge(DvTab, on='A', how='left').fillna({'DV':0})

关于Python SQL 到 pandas DataFrame,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59228849/

相关文章:

Python数据框匹配列表中的字符串

python - 使用python将数据框列表写入Excel工作表的最快方法

python - "Bad"Python安装

python - 需要一种从多列和多行返回值的方法

python - sqlalchemy.exc.IntegrityError : (sqlite3. IntegrityError) UNIQUE 约束失败 : users. 登录

SQL 循环遍历表进行计数和分组

sqlite - 将sqlite数据库与app和stringByAppendingPathComponent bundle 在一起

python - Python 3 中的默认导出

python - 无法将较大的 blob 上传到 Azure : azure. core.exceptions.ServiceRequestError : The operation did not complete (write) (_ssl. c:2317)

python - 我在制作基于图 block 的游戏时出错。有人可以帮忙吗?