既然您提到数据帧是从数据库派生的,那么考虑使用一个子查询的SQL解决方案,该子查询在其引擎中运行计算,而不是直接在Python中运行。在
下面假设一个MySQL数据库,但是根据实际的后端(SQLite、PostgreSQL、sqlserver等)调整库和连接字符串。下面是ANSI语法SQL,在大多数RDM中都是兼容的。在
SQL解决方案import pandas pd
import pymysql
conn = pymysql.connect(host="localhost" port=3306,
user="username", passwd="***", db="databasename")
sql = "SELECT t1.Days, t1.person_num, t1.IS_TRUE, \
(SELECT IFNULL(SUM(t2.IS_TRUE),0) \
FROM TableName t2 \
WHERE t2.person_num= t1.person_num \
AND t2.Days >= t1.Days - 7 \
AND t2.Days < t1.Days) AS IS_TRUE_7DAY_WINDOW \
FROM TableName t1"
df = pd.read_sql(sql, conn)
输出
^{pr2}$