python中的SQL代码-双索引数据透视表计数

python中的SQL代码-双索引数据透视表计数,python,sql,Python,Sql,我创建了自己的数据库,并通过Python成功地将csv数据添加到数据库中。因此,查询可以工作,但我使用python进行查询。包sqlite3。简而言之,该表是:用户ID、执行的操作类型、对其执行操作的对象ID df1和df2是数据帧 import pandas as pd import sqlite3 connection = sqlite3.connect("test.db") c = connection.cursor() df1.to_sql('tab1', c

我创建了自己的数据库,并通过Python成功地将csv数据添加到数据库中。因此,查询可以工作,但我使用python进行查询。包sqlite3。简而言之,该表是:用户ID、执行的操作类型、对其执行操作的对象ID

df1和df2是数据帧

import pandas as pd
import sqlite3    
connection = sqlite3.connect("test.db")
c = connection.cursor()
df1.to_sql('tab1', con = connection, if_exists = 'replace', chunksize = 1000)
df2.to_sql('tab2', con = connection, if_exists = 'replace', chunksize = 1000)
在这个SQL命令中,我需要选择列,连接一个表并只选择特定时间的数据。我希望可以,为了完整起见,我将它包括在那个里,但不会包括示例表中的所有列,因为它们只用于过滤请注意,不带轴的子查询可以工作

sql_command = """
SELECT * FROM
(SELECT tab1.action,
        tab1.iduser,
        tab2.idobject
FROM tab1, 
     tab2
LEFT JOIN tab2 ON tab1.objectid = tab2.objectid
      WHERE tab2.Datetime BETWEEN '2020-01-29' AND '2020-02-04'
) AS source 
PIVOT( 
      COUNT(tab1.iduser)
      FOR tab1.action IN (
          [a],
          [b],
          [c])
      ) AS pivot_table;"""

# execute query
c.execute(sql_command)
这是我从子查询中得到的表:

iduser      action     idobject
--------------------------------------
1              a         Obj1
1              b         Obj2
1              c         Obj3
1              a         Obj2
2              a         Obj1
2              c         Obj2
2              a         Obj2
2              b         Obj1
3              a         Obj1
3              c         Obj3
现在我想创建这样的表,即计算在每个对象上执行的操作类型的数量

action   idobject      Count
----------------------------------------------------------------------
a           Obj1          3
            Obj2          2
            Obj3          0
b           Obj1          1
            Obj2          1
            Obj3          0
c           Obj1          0
            Obj2          1
            Obj3          2

如果我使用PIVOT表运行上面的代码,我会得到错误“error:靠近“PIVOT”的语法不正确”。

由于没有两种SQL方言(ANSI SQL标准之外)是相似的,因此在SQLite的语言定义中没有PIVOT函数透视。但是,pandas具有许多枢轴功能。查看此规范的
pandas
post实际上您似乎只需要
groupby
aggregation:
df.groupby(['action','idobject'])['iduser'].count()